[4개의 정답이 모두 마지막 4개일 때]
#Prediction (예측결과)
0 0 0 1 1 1 1
#Precicion (예측의 정확도)
0 0 0 1/4 2/5 3/6 4/7
#Average Precision (예측 정확도의 평균)
(1/1 + 2/2 + 3/3 + 4/4) / 4 = 1.00
2.1 경진대회 소개
- 산탄데르 은행은 고객 맞춤형 제품 추천 제공
- 소수 고객에게만 다양한 추천 제공, 나머지 고객에게는 제품추천기회가 적어 불균등한 고객경험으로 이어진다.
- 고객의 과거 이력과 유사한 고객군들의 데이터를 기반으로 다음달에 해당 고객이 무슨 제품을 사용할지 예측하는 문제 준비
- 더 효과적인 추천시스템을 갖추게 된다면 산탄데르는 고객이 인생의 어느 단계에 있든 모든 고객의 개인적 필요에 알맞는 제품을 추천하여 그들을 만족시킬 수 있다.
2.2 경진대회 주최자의 동기
- 스페인의 산탄데르 그룹이 소유하고 있는 큰 은행.
- 고객을 대상으로 예금, 적금, 대출, 신용카드, 자금 관리 및 보험 등 다양한 금융제품을 판매하며 매출 올림.
- 자사의 금융제품을 사용중인 고객을 대상으로, 아직 고객이 사용하고 있지 않은 다른 금융제품을 소개하여 고객의 만족도 향상+은행매출 올리고 싶어함
- 고객 만족의 베스트 제품추천방법 : 은행의 숙련된 영업사원이 고객의 나이, 연봉, 자산, 결혼 유무, 거주지역, 성격 등의 정보를 토대로 이상적 자산계획을 세워주고 그에 알맞는 금융제품을 추천해주는 것.
- 그러나 매일 은행을 방문하는 고객 모두에게 적절한 추천을 할 수 있는 충분한 숫자의 영업사용 고용은 현실적으로 불가능
- 매일 은행을 방문하는 몇만명의 고객들 모두에게 1대1 맞춤 수준 금융 추천을 하기 위해 머신러닝 알고리즘을 사용하기로 함.
2.3 평가척도
- 산탄데르 제품 추천 경진대회: 고객이 신규로 구매할 제품이 무엇인지 예측하는 경진대회
- 신규구매제품: 지난 달에 이미 보유한 제품을 지속사용하는 것은 신규구매 x
- 캐글에 제출해야 하는 값: '고객이 2016-05-28(지난달) 시점에 보유하고 있지 않은 금융 제품 중, 2016-06-28(이번 달)에 구매할 것으로 예측되는 제품 상위 7개'
- 고객 고유 식별번호인 ncodeprs와 함께 'ind'로 시작하는 24개의 금융제품 중 고객이 구매할 것으로 예상되는 제품 상위 7개를 공백으로 띄워서 저장하면 된다.
- 이번 경진대회에서 사용되는 평가척도 : MAP@7(Mean Average Precision@7).
- Average Precision : 예측 정확도의 평균, 1은 정답, 0은 오답 의미
#Prediction(예측결과)
1 0 0 1 1 1 0
- 예측 결과물에 대한 정확도 측정 : 첫 번째에는 1개를 예측했을 때의 정확도가 1/1=100%, 두 번째와 세 번째는 오답 -> 0%, 4번째 예측 결과물이 정답인 경우 정확가 2/4=50%.
#Precision(예측의 정확도)
1/1 0 0 2/4 3/5 4/6 0
#Average Precision(예측 정확도의 평균)
(1/1+2/4+3/5+4/6) / 4 = 0.69
- 예측 결과물의 Average Precision : 정확도의 합을 정답개수만큼 나눈 숫자.
- 예측 개수인 7이 아닌 정답개수 4로 정확도의 합을 나누는 것
- 예측 결과물의 Average Precision은 0.69
- Mean Average Precision : 모든 예측 결과물의 Average Precision의 평균값 의미. @7이 붙는 이유 : 최대 7개의 금융상품을 예측할 수 있다는 것 의미.
- MAP@7의 예측 순서에 매우 예민한 평가척도. 정답을 앞쪽에 예측하는 것이 더 좋은 점수를 받을 수 있다는 뜻.
[4개의 정답이 모두 첫 4개일 때]
#Prediction (예측결과)
1 1 1 1 0 0 0
#Precision (예측의 정확도)
1/1 2/2 3/3 4/4 0 0 0
#Average Precision (예측 정확도의 평균)
(1/1 + 2/2 + 3/3 + 4/4 ) / 4 = 1.00
[4개의 정답이 모두 마지막 4개일 때]
#Prediction (예측결과)
0 0 0 1 1 1 1
#Precision(예측의 정확도)
0 0 0 1/4 2/5 3/6 4/7
#Average Precision (예측 정확도의 평균)
(1/4 + 2/5 + 3/6 + 4/7) / 4 = 0.43
경진대회에서 MAP@7 평가 척도를 구하기 위해 사용하는 코드
- mapk()의 입력 값으로 들어가는 actual, predicted는 (고객 수*7)의 dimension을 갖는 list of list
- 7개의 금융 제품명이 숫자 목록 형태로 저장되고 이러한 목록이 고객 수만큼 있는 list of list
import numpy as np
def apk(actual, predicted, k=7, default=0.0):
# Map@7 이므로, 최대 7개만 사용
if len(predicted) > k:
predicted = predicted[:k]
score=0.0
num_hits=0.0
for i, p in enumerate(predicted);
# 점수를 부여하는 조건은 다음과 같다 :
# 예측값이 정답에 있고 ('p in actual')
# 예측값이 중복이 아니면 ('p not in predicted[:i]')
if p in actual and p not in predicted[:i]:
num_hits += 1.0
score += num_hits / (i+1.0)
#정답 값이 공백일 경우 무조건 0.0점 반환
if not actual;
return default
#정답의 개수(len(actual))로 average precision을 구한다.
return score / min(len(actual), k)
def mapk(actual, predicted, k=7, default=0.0):
#list of list인 정답 값(actual)과 예측 값(predicted)에서 고객 별 Average Precision을 구하고 np.mean()을 통해 평균 계산
return np.mean([apk(a, p, k, default) for a,p in zip(actual, predicted)])
2.4 주요 접근
- 산탄데르 제품 추천 경진대회에서는 tabular형태의 시계열 데이터가 제공
- 시계열 데이터: 기본적으로 'A라는 시간에 B라는 고객이 C라는 제품을 구매했다'라는 정보가 담긴 데이터.
- 데이터에는 고객 B에 대한 다양한 정보 포함 가능. C라는 제품에 대해서도 다양한 정보 포함 가능(제품 가격, 인기도, 제품분류, 특징 등 -> 더 풍부)
- 시계열 데이터: 기본적으로 'A라는 시간에 B라는 고객이 C라는 제품을 구매했다'라는 정보가 담긴 데이터.
- 데이터 전처리 작업 필수
- 데이터 노이즈 : 결측값-입력된 값이 없음을 의미, NA or nan(not a number), 이상치(outlier), 사람의 실수로 인해 잘못 입력된 값, 개인정보 보호를 위해 익명화된 변수 등
- 피쳐 엔지니어링 필수
- 머신러닝 모델이 좋은 성능을 얻기 위해서는 좋은 피처 엔지니어링 반드시 필요.
- 시계열 데이터를 다루는 경진대회에서 쓰이는, 유의미 파생변수를 생성하기 위한 몇 가지 기술
- 날짜,시간 포함 데이터: 주중/주말여부, 공휴일여부, 계절, 아침낮밤 등 다양한 파생변수
- 과거 데이터를 활용하는 lag데이터를 파생변수로 생성 가능
- 모든 파생변수가 모델에 유의미한 것은 x. 식별력이 있는 변수는 모델마다, 문제마다 다름 -> 모든 가능성을 시도해보는 것이 좋음
- Tabular 형태의 시계열 데이터를 다루는 경진대회에서는 딥러닝모델보다 트리기반 앙상블모델이 더 좋은 성능을 낸다.
- XGBoost가 가장 좋은 성능, 빠른 속도, 가장 많이 사용되는 트리모델
- LightGBM은 마이크로소프트에서 오픈소스한 Boosting Tree 알고리즘 -> XGBoost보다 빠른 학습속도, 캐글 경진대회에서 활발하게 사용중
2.6 탐색적 데이터 분석
실습
'CS > Data Science' 카테고리의 다른 글
[Data Science] EPOCH_ch04. 포르토 세구로 안전 운전자 예측 경진대회 (p.258 ~ p.267) (0) | 2025.03.23 |
---|---|
[Data Science] EPOCH_Kaggle 3주차 (0) | 2025.03.19 |
[Data Science] EPOCH_Kaggle 1주차 (1) | 2025.03.06 |
[Data Science] Kaggle 사용법 (1) | 2025.02.28 |