728x90
반응형
이미지 썸네일 삭제
(체험) 제2유형 - 빅데이터분석기사 실기 체험
제공된 데이터는 백화점 고객이 1년간 상품을 구매한 속성 데이터이다. 제공된 학습용 데이터(data/customer_train.csv)를 이용하여 백화점 구매 고객의 성별을 예측하는 모델을 개발하고, 개발한 모델에 기반하여 평가용 데이터(data/customer_test.csv)에 적용하여 얻은 성별 예측 결과를 아래 【제출 형식】에 따라 CSV 파일로 생성하여 제출하시오. * 예측 결과는ROC-AUC평가지표에 따라 평가함 * 성능이 우수한 예측 모델을 구축하기 위해서는 데이터 정제, Feature Engineering, 하이퍼 파...
dataq.goorm.io
※ ROC-AUC를 보았다는건
-> 이진분류
-> 확률값을 예측해야하므로 predict_proba()를 사용해야함
※ CSV 파일예시가 010101 이라고 해서 꼭 그런건 아님
※ ROC-AUC는 1이 양성 클래스 이므로, 특별한 언급이 없다면 1인 확률을 보면됨 !!!
[가장 쉬운 방법 - 평가 데이터를 나누지 않았음]
# 출력을 원하실 경우 print() 함수 활용
# 예시) print(df.head())
# getcwd(), chdir() 등 작업 폴더 설정 불필요
# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
#EDA
pd.set_option('display.max_columns',None)
print(train.shape, test.shape)
print(train.info())
# object 변수는 2개 밖에 없음
# 결측치 제거해보자 > 환불금액에 결측치가 있고 이걸 0으로 채우자
# print(train.isnull().sum())
# print(train.isnull().sum())
# 전처리하기 (안에다가 대입하는거 잊지말기, test도 처리하는거)
train['환불금액'] = train['환불금액'].fillna(0)
# print(train.isnull().sum())
test['환불금액']=test['환불금액'].fillna(0)
#잘모르니까 일단 수치형 데이터는 뻈음
cols=['총구매액','최대구매액','환불금액','방문일수','방문당구매건수','주말방문비율','구매주기']
target = train.pop('성별')
# 모델 학습
from sklearn.ensemble import RandomForestClassifier
rf=RandomForestClassifier()
rf.fit(train[cols],target)
pred = rf.predict_proba(test[cols])
df=pd.DataFrame({
'pred':pred[:,1]
})
# print(df)
df.to_csv("result.csv",index=False)
result=pd.read_csv("result.csv")
print(result)
pd.set_option('display.max_columns',None) >> 이걸 넣으면 컬럼이 그나마 잘보임
검증용 데이터를 나누지 않으니 , 이게 진짜 잘된건지 확인할 바가 없음
그래서 검증용 데이터가 필요함
[검증용 데이터 나누기]
# 문제정의
# roc-auc -> 확률값을 예측 predict_proba()
# 양성(1, 남자) 클래스 확률값
# 분류(이진)
# 데이터 불러오기
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
# EDA
pd.set_option('display.max_columns', None)
# print(train.shape, test.shape)
# print(train.head())
# print(train.info())
# print(train.isnull().sum())
# print(test.isnull().sum())
# print(train.describe(include='O'))
# print(test.describe(include='O'))
# print(sorted(list(train['주구매상품'].unique())))
# print(sorted(list(test['주구매상품'].unique())))
a = set(train['주구매상품'].unique())
b = set(test['주구매상품'].unique())
print(a - b)
print(b - a)
# 전처리
train['환불금액'] = train['환불금액'].fillna(0)
test['환불금액'] = test['환불금액'].fillna(0)
from sklearn.preprocessing import LabelEncoder
cols = ['주구매상품', '주구매지점']
for col in cols:
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
target = train.pop('성별')
# 검증용 데이터
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state = 0)
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
# 모델 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_tr, y_tr)
# pred = model.predict_proba(X_val[cols])
pred = model.predict_proba(X_val)
from sklearn.metrics import roc_auc_score
print(roc_auc_score(y_val, pred[:,1]))
# 제출
pred = model.predict_proba(test)
submit = pd.DataFrame({
'pred': pred[:,1]
})
submit.to_csv('result.csv', index=False)
print(pd.read_csv('result.csv'))
# 베이스라인 모델(수치형) : 0.57
# predict : 0.55
# 레이블 인코딩 : 0.609
728x90
'IT&게임 > 빅데이터분석기사(빅분기)' 카테고리의 다른 글
비전공자의 빅데이터분석기사 실기 후기 + 캐글사용방법 (0) | 2024.06.26 |
---|---|
[공식문제] 빅분기 제3유형 예제 문제 (독립성검정, 로지스틱 회귀, 오즈비) (0) | 2024.06.18 |
[공식문제] 빅분기 제1유형 예제문제 (MinMaxScaler) (0) | 2024.06.18 |
빅분기 작업형2 기출 정리 (0) | 2024.06.18 |
인코딩 정리(원핫인코딩/레이블인코딩) (0) | 2024.06.18 |
댓글