더보기
이번 주제는 Porto serqruo safe prediction 로,
목표는 운전자가 내년에 자동차 보험 청구를 시작할 확률울 예측하는 모델을 구축 하는 것이다.
이번 필사는 Gabriel Preda님의 코드를 참고하였다.
총 3가지 포스트로 내용을 나누었고, 순서는 아래와 같다.
Porto serqruo safe prediction(Gabriel Preda) (1)
더보기
1. 데이터 분석 준비
2. 데이터 설명
3. Metadata 설명
Porto serqruo safe prediction(Gabriel Preda) (2)
더보기
4. 데이터 분석과 통계
Porto serqruo safe prediction(Gabriel Preda) (3)
더보기
5. 모델을 위한 데이터 준비
6. 모델 준비
7. 예측 모델 실행
1. 데이터 분석 준비
1) 패키지 가져오기
In [66]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.utils import shuffle
import missingno as msno
# Imputer was deprecated 3 versions ago and remove in 0.22
# from sklearn.preprocessing import Imputer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import VarianceThreshold
from sklearn.feature_selection import SelectFromModel
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import cross_val_score
from lightgbm import LGBMClassifier
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
pd.set_option('display.max_columns', 100)
2) 데이터 가져오기
In [67]:
trainset = pd.read_csv('../data/porto-seguro-safe-driver-prediction/train.csv')
testset = pd.read_csv('../data/porto-seguro-safe-driver-prediction/test.csv')
In [68]:
trainset.describe()
Out[68]:
2. 데이터 설명
- 몇 개의 그룹이 정의되어 있고 이러한 그룹에 속하는 특징에는 이름(ind, reg, car, calc)의 패턴이 포함되어 있다.
ind
는 개인을 나타내며,reg
은 등록이고,car
는 스스로 설명하며,calc
은 계산된 필드를 나타낸다.
bin
은 이항 feature로 사용된다.cat
는 범주형 feature로 사용된다.bin
또는cat
표시가 없는 feature는 정수값이다. (연속형이거나 순서형이거나)- 결측값은
-1
로 표시된다. - 예측의 대상이 되는 값은 target column에 있다. 이것은 피보험자에 대한 청구 여부를 나타낸다.
- 운전자가 내년에 보험 청구를 할 것인지 예측하는 대회!
- target = 1 : 보험을 청구한다.
- target = 0 : 보험을 청구하지 않는다.
- id는 데이터 입력 순서 번호다.
In [69]:
trainset.head()
Out[69]:
In [70]:
print("Train dataset (row, cols):", trainset.shape, "\nTestdataset (row, cols):", testset.shape)
In [71]:
# 우리가 구해야할 것은 testset target 컬럼에 무슨 값이 들어갈지 예측하는 것.
print("Columns in train and not in test dataset:", set(trainset.columns) - set(testset.columns))
3. Metadata 소개
데이터 조작을 용이하게 하기 위해, 우리는 열차 집합의 변수와 몇 개의 메타 정보를 연관시킬 것이다. 이렇게 하면 분석, 검사 또는 모델링을 위한 다양한 유형의 feature의 선택이 용이해진다. car
, ind
, reg
, calc
타입의 특징들을 위한 카테고리 필드를 사용하고 있다.
- use: input, ID, target
- type: nominal, interval, ordinal, binary
- preserve: True or False
- dataType: int, float, char
- category: ind, reg, car, calc
1) Metadata dataframe 생성¶
In [72]:
data = []
for feature in trainset.columns:
if feature == 'target':
use = 'target'
elif feature == 'id':
use = 'id'
else:
use = 'input'
if 'bin' in feature or feature == 'target' :
type = 'binary'
elif 'cat' in feature or feature == 'id':
type = 'categorical'
elif trainset[feature].dtype == 'float64' or isinstance(trainset[feature].dtype, float):
type = 'real'
elif trainset[feature].dtype == 'int64':
type = 'integer'
preserve = True
if feature == 'id':
preserve = False
dtype = trainset[feature].dtype
category = 'none'
if 'ind' in feature:
category = 'individual'
elif 'reg' in feature:
category = 'registration'
elif 'car' in feature:
category = 'car'
elif 'calc' in feature:
category = 'calculated'
feature_dictionary = {
'varname' : feature,
'use' : use,
'type' : type,
'preserve' : preserve,
'dtype' : dtype,
'category' : category
}
data.append(feature_dictionary)
metadata = pd.DataFrame(data, columns=['varname', 'use','type', 'preserve',
'dtype', 'category'])
metadata.set_index('varname', inplace=True)
metadata
Out[72]:
2) Metadata 데이터 분포 확인
In [73]:
# 카테고리 변수만 추출
metadata[(metadata.type == 'categorical') & (metadata.preserve)].index
Out[73]:
In [74]:
# 카테고리 변수중 unique 한 값들의 갯수
pd.DataFrame({'count' : metadata.groupby(['category'])['category'].size()}).reset_index()
Out[74]:
In [75]:
# use와 type 변수중 unique 한 값들의 갯수
pd.DataFrame({'count' : metadata.groupby(['use' ,'type'])['category'].size()}).reset_index()
Out[75]:
'Competition > Kaggle' 카테고리의 다른 글
[kaggle][필사] Porto serqruo safe prediction(Gabriel Preda) (2) (0) | 2020.09.08 |
---|---|
[kaggle] Porto serqruo safe prediction(Bert Carremans) (2) (0) | 2020.09.06 |
[kaggle] Porto serqruo safe prediction(Bert Carremans) (1) (0) | 2020.09.05 |