1. 시스템 종합 설계 #1조
201601376 김찬조
201601380 박경수
201601381 박재서
201601388 이석진
201802884 노성만
2. 경진대회
• 데이콘에서 주관하는 경진대회
• 신용카드 사용자 데이터를 보고 사용자의 대금 연체 정도를 예측하는 알고리즘 개발
• 사용 가능 프로그램 : R 또는 Python (Google Colab)
3. #클라우드 기반의 Jupyter 노트북
개발환경
#딥러닝 개발을 위한 라이브러리
가 이미 설치 → 높은 접근성
#고가인 GPU도 무료로 사용 가능
#GitHub 등과의 연동으로 자유롭
게 소스 개발 환경
개발환경
4. 데이터
train.csv test.csv
-DACON 제공 데이터
• train.csv 에는 index, credit 등의 정
보가 포함된 20가지 변수존재
• test.csv 에는 credit 변수가 제외된
19가지 변수가 존재
train.csv 에서 데이터간 상관관계 및
중요도를 파악하여 credit을 예측
예측된 credit을 sample_submission
라는 파일에 저장 후 제출
5. 평가 산식 : LogLoss
#Log Loss
모델이 예측한 확률 값을 직접적으로 반영하여 평가
확률 값을 음의 log함수에 넣어서 변환을 시킨 값으로 평가
-> 잘못 예측할 수록, 패널티를 부여하기 위함
6. 평가 산식 : LogLoss
#Log Loss
정답 수 정답 확률
A 1개 0.99
B 1개 0.2
정답 수 정답 확률 Log Loss
A 1개 0.99 -log(0.99)
= 0.01005
B 1개 0.2 -log(0.2)
= 1.6094
12. 데이터의 특이점 발견
데이터에서 다른 index값들이 begin_month와 credit값을 제외한 나머지 변수에서 같은 값을 나타내는 것을 확인
→ 이는 한 사람이 여러 개의 카드를 만들었음을 의미
1) 중복되는 행을 제거하지 않고 분석할 경우
• 인물별로 동일한 credit을 가진 사람이 많은 경우: begin_month의 의미가 없어짐
• 인물별로 다른 credit을 가진 경우 : begin_month가 미치는 영향이 크다고 볼 수 있게 된다.
2) 중복되는 데이터를 제거하고 분석
• 14358개 제거됨 → 데이터가 12099개밖에 남지 않는다
• 또한, 데이터를 제거할 시 begin_month에 대한 처리가 애매함
23. CatBoost는 “Categorical Boost” 약자이며 Yandex에서 개발된 오픈 소스 Machine Learning
CERN, Cloudflare, Careem taxi를 포함한 다른 회사에서 검색, 추천 시스템, 개인 비서, 자율주행 자동차, 날씨
예측 및 기타 많은 작업에 사용된다.
# Catboost란?
24. # Catboost란?
• Great quality without parameter tuning/ Categorical features
support
Category features를 사용하기 위해서는 One-Hot-Encoding등 데이터를 전
처리할 필요가 있었지만 Catboost에서는 사용자가 다른 작업을 하지 않아도
자동으로 이를 변환하여 사용한다.
• Improved accuracy
새로운 gradient-boosting 방식으로 모델을 구성할 때 과적합을 줄입니다.
• Fast prediction
학습 시간이 다른 GBDT에 보다는 더 오래 걸리는 대신에 예측 시간이 13-16
배 정도 더 빠르다.
25. 모델 - Catboost
#데이터 전처리
#결측치 처리
train.fillna('NaN', inplace=True)
test.fillna('NaN', inplace=True)
train = train.drop(14900,0)
#family_size가 7보다 큰 데이터 삭제
train = train[(train['family_size'] <= 7)]
train = train.reset_index(drop=True)
#양수인 데이터는 무직자로 판단하며 0으로 처리
train['DAYS_EMPLOYED'] = train['DAYS_EMPLOYED'].map(lambda x: 0 if x > 0 else x)
test['DAYS_EMPLOYED'] = test['DAYS_EMPLOYED'].map(lambda x: 0 if x > 0 else x)
26. #데이터 전처리
#음수값을 양수값으로 변환
feats = ['DAYS_BIRTH', 'begin_month', 'DAYS_EMPLOYED']
for feat in feats:
train[feat]=np.abs(train[feat])
test[feat]=np.abs(test[feat])
#불필요한 값 삭제
Train = train.drop("FLAG_MOBIL", axis = 1)
Train = train.drop("child_num", axis = 1)
test = test.drop("FLAG_MOBIL", axis = 1)
test = test.drop("child_num", axis = 1)
모델 - Catboost
32. #결론
• Catboost는 ‘ID’라는 변수를 생성한 후, cat_feature를 튜닝하였기 때문에 LGBM보다 성능이 좋게 나옴
• 정형 데이터이기 때문에 DNN은 적합하지 않음
• 기존 데이터로부터 새로운 변수 생성 및 모델에 대한 깊은 이해가 중요함
최종 결론
<Catboost>
#최종 결론