Python

데이콘 대회 참여 - 05 GBM 파라미터 튜닝

공지

제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.

사전작업

!pip install https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
Collecting https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
  Using cached https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
.
.
.
Successfully built pandas-profiling

I. 빅쿼리 연동

  • 지난 시간에 데이콘에서 내려받은 데이터를 빅쿼리에 넣는 작업을 진행하였다.
  • 빅쿼리에 저장된 데이터를 구글 코랩으로 불러오려면 다음과 같이 진행한다.

(1) 사용자 계정 인증

구글 코랩을 사용해서 인증 절차를 밟도록 한다. 아래 소스코드는 변경시키지 않는다. 아래 절차대로 진행하면 된다. Gmail 인증 절차와 비슷하다.

데이콘 대회 참여 - 04 데이터셋 분리

공지

제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.

사전작업

!pip install https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
Collecting https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
  Using cached https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
.
.
.
Successfully built pandas-profiling

I. 빅쿼리 연동

  • 지난 시간에 데이콘에서 내려받은 데이터를 빅쿼리에 넣는 작업을 진행하였다.
  • 빅쿼리에 저장된 데이터를 구글 코랩으로 불러오려면 다음과 같이 진행한다.

(1) 사용자 계정 인증

구글 코랩을 사용해서 인증 절차를 밟도록 한다. 아래 소스코드는 변경시키지 않는다. 아래 절차대로 진행하면 된다. Gmail 인증 절차와 비슷하다.

데이콘 대회 참여 - 03 데이터 샘플링과 종속변수 로그변환

공지

제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.

사전작업

!pip install https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
Collecting https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
  Using cached https://github.com/pandas-profiling/pandas-profiling/archive/master.zip
.
.
.
Successfully built pandas-profiling

I. 빅쿼리 연동

  • 지난 시간에 데이콘에서 내려받은 데이터를 빅쿼리에 넣는 작업을 진행하였다.
  • 빅쿼리에 저장된 데이터를 구글 코랩으로 불러오려면 다음과 같이 진행한다.

(1) 사용자 계정 인증

구글 코랩을 사용해서 인증 절차를 밟도록 한다. 아래 소스코드는 변경시키지 않는다. 아래 절차대로 진행하면 된다. Gmail 인증 절차와 비슷하다.

Python for loop example

강의 홍보

I. 개요

  • 지난 시간에 for_loop의 기본적인 개념에 대해 살펴봤다.
  • 이번 시간에는 for_loop의 실제 다양한 활용 방안에 대해 살펴본다.

II. 데이터 시각화

  • 변수의 개수에 상관없이 for-loop를 활용하면 무한대로 시각화를 작성할 수 있다.
  • 빠르게 코드로 확인해본다.
  • IRIS 데이터를 수집하는 코드를 작성한다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(df.head())
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2
  • 변수별로 시각화를 작성하기 위해, 우선 변수명을 List에 포함한다.
feature_names = iris.feature_names
print(feature_names)
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
  • 다음 코드는 시각화 작성을 위한 기본 환경설정이다.
  • figsizeJupyter Notebook에 맞게 최적화 되어 있기는 하지만, 수정할 수 있다.
%matplotlib inline
import matplotlib.pylab as plt

plt.rcParams["figure.figsize"] = (14,4)
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['lines.color'] = 'r'
plt.rcParams['axes.grid'] = True 
  • 그리고 마지막으로 for-loop 활용하는 시각화를 작성한다.
for fea in feature_names:
  data = df.copy()
  # iris.sepal_length[:20].plot(kind='bar', rot=0)
  data[fea].plot(kind='hist', rot=0)
  plt.xlabel(fea)
  plt.title(fea)
  plt.show()

png

데이콘 대회 참여 - 02 GBM을 활용한 머신러닝 예제

공지

제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.

개요

  • 본 예제에서는 제주 빅데이터 경진대회에서 제공하는 베이스라인 코드를 살려서 작성하였다.
  • 처음 대회를 입문하는 데 있어서, 빠르게 제출하는 것에 의미부여를 하기 바란다.
  • 다만, 데이터를 불러오는 영역 및 머신러닝 모형 알고리즘만 조금 수정하였다.
  • 향후 매일 업데이트 하면서 일종의 가이드라인이 되었으면 좋겠다.

I. 빅쿼리 연동

(1) 사용자 계정 인증

구글 코랩을 사용해서 인증 절차를 밟도록 한다. 아래 소스코드는 변경시키지 않는다. 아래 절차대로 진행하면 된다. Gmail 인증 절차와 비슷하다.

Python for loops in different ways

강의 홍보

I. 개요

  • 여러 형태의 반복문을 배우고 실습한다.
  • 한줄로 작성하는 반복문을 배우고 실습한다.

II. For Loop Basic Syntax

  • 파이썬의 기본 문법은 아래와 같다.
for <변수> in <iterable>:
    <코드>
  • 여기에서 iterable의 개념은 listtuple을 의미한다.
  • 간단하게 for_loop 코드를 작성해보자.
    • 우선, A라는 리스트 객체를 작성한다.
    • for_loop를 활용해서 리스트 안에 있는 것을 하나씩 출력한다.
A = ["철수", "영희", "길동"]
for i in A:
  print(i)
철수
영희
길동

(1) Iterables

  • Iteration을 한국어로 번역하면 되풀이다.
  • 그런데, 어떤 데이터 유형이 되풀이를 할 수 있을가?
    • ListTuple이 되풀이가 될 수 있는 소재인 것은 확실하다.
  • 어떤 객체(=Object)가 있을 때, 이 객체가 iterable 한것인지, 또는 아닌지 확인하는 함수(iter())도 있다.
print(iter("ABC"))
<str_iterator object at 0x7f2464faeb00>
print(iter(["A", "B", "C"]))
<list_iterator object at 0x7f2464faedd8>
print(iter(("A", "B", "C")))
<tuple_iterator object at 0x7f2464faedd8>
print(iter({"A": 1, "B": 3, "C": 3}))
<dict_keyiterator object at 0x7f2464fdd458>
  • 그런데, 수치형의 경우에는 iteration이 적용되지 않는다.
iter(100)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-f3bbc5ecfc9b> in <module>()
----> 1 print(iter(100))

TypeError: 'int' object is not iterable
iter(3.14)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-eb85da4c3f57> in <module>()
----> 1 iter(3.14)

TypeError: 'float' object is not iterable
  • 단일 수치형 데이터를 제외하고는 사실상 모든 데이터가 iterable의 성질을 가지고 있다.

(2) next()

  • next()iterator에서의 next value를 의미한다.
  • 다음 코드를 확인해보자.
A = ["철수", "영희", "길동"]
iterable = iter(A)
iterable

<list_iterator at 0x7f2464fb7dd8>

If else, and more

강의 홍보

I. 개요

  • 조건문에 대해 배우고 실습하는 시간을 갖는다.
  • else와 elif에 대해 배우고 실습한다.
  • 한줄로 작성하는 if_else에 대해 배우고 실습한다.

II. If 조건문 소개

  • Excel을 배운 사람이라면 누구나 아는 문법이다.
    • 다만, 위 문법을 파이썬 언어에 맞게 변형한 것이다.
if <조건=True>:
  <코드1>
  <코드2>

(1) 언제 실행되는가?

  • 위 구문의 뜻이 무엇인가?

데이콘 대회 참여 - 01 제주시 빅데이터 카드 매출 경진대회 데이터 수집 및 저장

I. 개요

  • 본 과정은 직업훈련기관 수업의 일환으로 진행하였음
  • 수강생들이 기본적으로 어려워하는 클라우드 DB연동부터 구현하여 빠르게 EDA를 활용할 수 있도록 진행함
  • DBBigQuery를 활용함.

(1) 대회 참여 및 파일 다운로드 상세

  • 데이콘은 국내 빅데이터 경진대회이다.

(2) 대회 개요

Ref. https://dacon.io/competitions/official/235615/overview/

  • 주제

    • AI 알고리즘 활용 카드 사용 금액 예측
  • 목표

    • 신용카드 사용 내역 데이터를 활용한 지역별, 업종별 월간 카드 사용 총액 예측
  • 배경

    • 신용카드 사용량을 분석을 통한 ‘Post COVID-19 시대’ 신용카드 사용량 예측 모델 개발
    • 지역 경제 위축 및 중소상공인 경영난 해소를 위한 대책 마련
  • 주최/주관

추천 시스템 개요 및 이론, Surprise Package

I. 개요

  • 대고객 대상으로 한 대부분의 플랫폼 서비스 업체들은 고객 개개인에게 맞춤형의 추천 서비스를 도입하고 있음
    • 전자상거래 업체, 유투브, 애플 뮤직 등
  • ML의 여러 알고리즘 중 비즈니스 관점에 부합하는 기법이 추천 시스템.
  • 추천 시스템의 진정한 묘미는 사용자 본인도 모르는 취향 발견, 재구매로 연결하도록 설계
  • 누가 필요할까?
    • 모든 플랫폼 서비스
    • 이유1: 플랫폼은 다수의 판매자와 소비자를 필요로 함, 문제는 카테고리와 메뉴구성이 복잡해지면 소비자의 제품 선택에 부작용
    • 이유2: 만족도가 떨어지면 고객은 그 플랫폼을 떠날 가능성이 크며, 이는 플랫폼 서비스의 매출 하락과 직결
    • 모든 플랫폼 서비스는 기본적으로 추천서비스를 장착하고 싶어함
  • 영화 데이터를 기준으로 추천시스템을 단계별로 구현함을 목표로 함

II. 추천시스템의 유형 및 역사

  • 추천시스템의 유형과 간단한 역사에 대해 배워보도록 한다.

(1) 유형

  • 크게 세가지로 구분됨.
    • Demographic Filtering
    • 콘텐츠 기반 필터링 (Content Filtering)
    • 협업 필터링 (Collaborative Filtering)
      • 최근접 이웃(Nearest Neighbor)
      • 잠재 요인(Latent Factor)

(2) 역사

  • 초창기: 콘텐츠 기반 필터링 또는 최근접 이웃 기반 협업 필터링이 주로 사용됨.
  • 중기: 넷플릭스 추천 시스템 경연 대회에서 행렬 분해 (Matrix Factorization) 기법을 이용한 잠재요인 협업 필터링 방식으로 우승한 뒤, 유명해짐.
  • 최근: 개인화 특성을 강화하기 위해서 하이브리드 형식으로 콘텐츠 기반과 협업 기반을 적절히 결합해 사용하는 경우도 늘고 있음

III. Surprise 패키지

  • Surprise 패키지는 추천시스템 패키지이다.
  • 설치 방법은 다음 문서를 참조하기를 바란다.
  • 해당 패키지를 활용하면 보다 쉽게 API를 활용해서 추천 시스템을 구축할 수 있다.
    • 다양한 추천 알고리즘들이 해당 패키지에 내재되어 있다.

(1) 패키지 개요

  • 영어 원문에는 아래와 같이 설명되어 있다.

추천 시스템 개요 및 이론, Baseline Code

I. 개요

  • 대고객 대상으로 한 대부분의 플랫폼 서비스 업체들은 고객 개개인에게 맞춤형의 추천 서비스를 도입하고 있음
    • 전자상거래 업체, 유투브, 애플 뮤직 등
  • ML의 여러 알고리즘 중 비즈니스 관점에 부합하는 기법이 추천 시스템.
  • 추천 시스템의 진정한 묘미는 사용자 본인도 모르는 취향 발견, 재구매로 연결하도록 설계
  • 누가 필요할까?
    • 모든 플랫폼 서비스
    • 이유1: 플랫폼은 다수의 판매자와 소비자를 필요로 함, 문제는 카테고리와 메뉴구성이 복잡해지면 소비자의 제품 선택에 부작용
    • 이유2: 만족도가 떨어지면 고객은 그 플랫폼을 떠날 가능성이 크며, 이는 플랫폼 서비스의 매출 하락과 직결
    • 모든 플랫폼 서비스는 기본적으로 추천서비스를 장착하고 싶어함
  • 영화 데이터를 기준으로 추천시스템을 단계별로 구현함을 목표로 함

II. 추천시스템의 유형 및 역사

  • 추천시스템의 유형과 간단한 역사에 대해 배워보도록 한다.

(1) 유형

  • 크게 세가지로 구분됨.
    • Demographic Filtering
    • 콘텐츠 기반 필터링 (Content Filtering)
    • 협업 필터링 (Collaborative Filtering)
      • 최근접 이웃(Nearest Neighbor)
      • 잠재 요인(Latent Factor)

(2) 역사

  • 초창기: 콘텐츠 기반 필터링 또는 최근접 이웃 기반 협업 필터링이 주로 사용됨.
  • 중기: 넷플릭스 추천 시스템 경연 대회에서 행렬 분해 (Matrix Factorization) 기법을 이용한 잠재요인 협업 필터링 방식으로 우승한 뒤, 유명해짐.
  • 최근: 개인화 특성을 강화하기 위해서 하이브리드 형식으로 콘텐츠 기반과 협업 기반을 적절히 결합해 사용하는 경우도 늘고 있음

III. Demographic Filtering

  • 가장 기초적이면서 Simple한 추천시스템 방식
  • 같은 영화를 인구통계학에 기반하여 각 사용자에게 추천
  • 그런데, 영화추천 시, 주로 인기도가 높은 대중적인 영화 위주 (예를 들면 Top 250개)만 선별하여 각 사용자에게 전달. 대중적인 영화들은 영화를 보지 않는 다른 일반 관객들에게게 호감을 가질 가능성이 더 높을 것으로 추정
  • 필요조건
    • 영화 평점 점수
    • 평점 점수 기반 영화 정렬

(1) 데이터 수집

(2) 데이터 설명

  • 여러 데이터들이 있는데, 관련 내용은 캐글 본문의 것을 그대로 사용한다.
    • movies_metadata.csv: The main Movies Metadata file. Contains information on 45,000 movies featured in the Full MovieLens dataset. Features include posters, backdrops, budget, revenue, release dates, languages, production countries and companies.
    • keywords.csv: Contains the movie plot keywords for our MovieLens movies. Available in the form of a stringified JSON Object.
    • credits.csv: Consists of Cast and Crew Information for all our movies. Available in the form of a stringified JSON Object.
    • links.csv: The file that contains the TMDB and IMDB IDs of all the movies featured in the Full MovieLens dataset.
    • links_small.csv: Contains the TMDB and IMDB IDs of a small subset of 9,000 movies of the Full Dataset.
    • ratings_small.csv: The subset of 100,000 ratings from 700 users on 9,000 movies.

(3) 구글 드라이브와 연동

  • 구글 드라이브와 연동하여 pandas를 활용하여 데이터를 수집한다.
  • 구글 드라이브와 연동하는 방법에 대해서는 Colab + Drive + Github Workflow에서 확인한다.
from google.colab import drive # 패키지 불러오기 
from os.path import join  

ROOT = "/content/drive"     # 드라이브 기본 경로
print(ROOT)                 # print content of ROOT (Optional)
drive.mount(ROOT)           # 드라이브 기본 경로 Mount

MY_GOOGLE_DRIVE_PATH = 'My Drive/Colab Notebooks/your/path' # 프로젝트 경로
PROJECT_PATH = join(ROOT, MY_GOOGLE_DRIVE_PATH) # 프로젝트 경로
print(PROJECT_PATH)
/content/drive
Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly

Enter your authorization code:
··········
%cd "{PROJECT_PATH}"
!ls
data  source
import pandas as pd
import pandas_profiling
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
import seaborn as sns

from IPython.core.display import display, HTML
from pandas_profiling import ProfileReport
/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
  import pandas.util.testing as tm
import pandas as pd
metadata = pd.read_csv('data/movies_metadata.csv', low_memory=False)
metadata.head(3)
adultbelongs_to_collectionbudgetgenreshomepageidimdb_idoriginal_languageoriginal_titleoverviewpopularityposter_pathproduction_companiesproduction_countriesrelease_daterevenueruntimespoken_languagesstatustaglinetitlevideovote_averagevote_count
0False{'id': 10194, 'name': 'Toy Story Collection', ...30000000[{'id': 16, 'name': 'Animation'}, {'id': 35, '...http://toystory.disney.com/toy-story862tt0114709enToy StoryLed by Woody, Andy's toys live happily in his ...21.946943/rhIRbceoE9lR4veEXuwCC2wARtG.jpg[{'name': 'Pixar Animation Studios', 'id': 3}][{'iso_3166_1': 'US', 'name': 'United States o...1995-10-30373554033.081.0[{'iso_639_1': 'en', 'name': 'English'}]ReleasedNaNToy StoryFalse7.75415.0
1FalseNaN65000000[{'id': 12, 'name': 'Adventure'}, {'id': 14, '...NaN8844tt0113497enJumanjiWhen siblings Judy and Peter discover an encha...17.015539/vzmL6fP7aPKNKPRTFnZmiUfciyV.jpg[{'name': 'TriStar Pictures', 'id': 559}, {'na...[{'iso_3166_1': 'US', 'name': 'United States o...1995-12-15262797249.0104.0[{'iso_639_1': 'en', 'name': 'English'}, {'iso...ReleasedRoll the dice and unleash the excitement!JumanjiFalse6.92413.0
2False{'id': 119050, 'name': 'Grumpy Old Men Collect...0[{'id': 10749, 'name': 'Romance'}, {'id': 35, ...NaN15602tt0113228enGrumpier Old MenA family wedding reignites the ancient feud be...11.7129/6ksm1sjKMFLbO7UY2i6G1ju9SML.jpg[{'name': 'Warner Bros.', 'id': 6194}, {'name'...[{'iso_3166_1': 'US', 'name': 'United States o...1995-12-220.0101.0[{'iso_639_1': 'en', 'name': 'English'}]ReleasedStill Yelling. Still Fighting. Still Ready for...Grumpier Old MenFalse6.592.0

(4) 평점 가중치 함수 구현

  • 여기에서 주목해야 하는 것이 있는데, vote_averagevote_count를 유심히 봐야한다.
  • 3명이 투표해서 얻은 평점 8.7의 영화 Vs. 100명이 투표해서 얻은 평점 8.0의 영화 중 어느 것이 더 좋다고 볼 수 있을까?
  • 이러한 부분을 고려하여 가중치 공식을 만든다. (wr:Weighted Rating)

$$ wr = \left (\frac{\nu }{\nu+\mu } \times R \right ) + \left (\frac{\nu }{\nu+\mu } \times C \right ) $$