* 퇴근후딴짓 님의 강의를 참고하였습니다.*
[ 문제 ]
아래는 백화점 고객의 1년간 구매 데이터이다.
(가) 제공데이터 목록
1. y_train.csv : 고객의 성별데이터(학습용), csv형식의 파일
2. X_train.csv, X_test.csv : 고객의 상품구매속성(학습용 및 평가용), csv형식의 파일
(나) 데이터 형식 및 내용
1. y_train.csv (3,500명 데이터)
2. X_train.csv (3,500명 데이터), X_test.csv (2,482명 데이터)
고객 3,500명에 대한 학습용데이터(y_train, X_train)를 이용하여 성별예측모형을 만든 후, 이를 평가용 데이터(X_test)에 적용하여 얻은 2,482명 고객의 성별 예측값(남자일 확률)을 다음과 같은 형식의 csv파일로 생성하시오. (제출한 모델의 성능은 ROC_AUC 평가 지표에 따라 채점)
(유의사항)
- 성능이 우수한 예측모형을 구축하기 위해서는 적절한 데이터 전처리, Feature Engineering, 분류 알고리즘 사용, 초매개변수 최적화, 모형 앙상블 등이 수반되어야 한다
- 수험번호.csv 파일이 만들어지도록 코드를 제출한다.
[ 풀이 ]
1. 라이브러리 및 데이터 불러오기
import pandas as pd
X_train = pd.read_csv("X_train.csv")
y_train = pd.read_csv("y_train.csv")
X_test = pd.read_csv("X_test.csv")
2. EDA (데이터 탐색)
# 데이터 크기
X_train.shape, y_train.shape, X_test.shape
# 데이터 샘플 X_train
X_train.head(3)
# 데이터 샘플 y_train
y_train.head(3)
# 데이터 샘플 X_test
X_test.head(3)
# [Tip] 컬럼이 다보이지 않을 때
pd.set_option('display.max_columns',None)
# 결측치 확인 train
X_train.isnull().sum()
# 결측치 확인 test
X_test.isnull().sum()
# 기초 통계
X_train.describe()
# 기초 통계 object
X_train.describe(include='object')
X_test.describe(include='object')
# [Tip] 지수표현식(과학적표기법) 사용 X
pd.options.display.float_format = '{:.2f}'.format
X_train.describe()
X_train['주구매상품'].unique()
X_test['주구매상품'].unique()
# [Tip] set 타입으로 변경하면 비교 가능함
a = set(X_train['주구매상품'].unique())
b = set(X_test['주구매상품'].unique())
print(a - b)
print(a.difference(b))
# target(label) 값 확인
y_train['gender'].value_counts()
3. 데이터 전처리
# 결측치처리
X_train = X_train.fillna(0) # 환불금액 0값으로 채움
X_test = X_test.fillna(0)
# id 삭제함 (단 test의 id값은 csv파일을 생성할 때 필요함으로 옮겨 놓음)
X_train = X_train.drop(['cust_id'], axis=1)
cust_id = X_test.pop('cust_id')
4. 피처엔지니어링
ㅇ LabelEncoder(범주형)
# from sklearn.preprocessing import LabelEncoder
# cols = ['주구매상품', '주구매지점']
# for col in cols:
# le = LabelEncoder()
# X_train[col] = le.fit_transform(X_train[col])
# X_test[col] = le.transform(X_test[col])
# X_train.head()
from sklearn.preprocessing import LabelEncoder
col = '주구매상품'
le = LabelEncoder()
X_train[col] = le.fit_transform(X_train[col])
X_test[col] = le.transform(X_test[col])
col = '주구매지점'
le = LabelEncoder()
X_train[col] = le.fit_transform(X_train[col])
X_test[col] = le.transform(X_test[col])
X_train.head()
ㅇ MinMaxScaler(수치형)
from sklearn.preprocessing import MinMaxScaler
cols = ['총구매액', '최대구매액', '환불금액', '내점일수', '내점당구매건수', '주말방문비율', '구매주기']
scaler = MinMaxScaler()
X_train[cols] = scaler.fit_transform(X_train[cols])
X_test[cols] = scaler.transform(X_test[cols])
X_train.head()
5. 검증 데이터 분리
# 검증 데이터 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train,
y_train['gender'],
test_size=0.2,
random_state=2022)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape
6. 모델링 및 평가 (분류 / RandomForest)
# 모델링 & 하이퍼파라미터 튜닝 & 앙상블
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state=2022)
model.fit(X_tr, y_tr)
pred = model.predict_proba(X_val)
# 예측 결과 확인
pred
# 검증 데이터 셋으로 평가
from sklearn.metrics import roc_auc_score
roc_auc_score(y_val, pred[:,1])
7. 예측 및 제출
# test 데이터 예측
pred = model.predict_proba(X_test)
pred
# 데이터 프레임 만들기
submit = pd.DataFrame(
{
'cust_id':cust_id,
'gender':pred[:,1]
}
)
# 샘플 데이터 확인
submit.head()
# csv 생성
submit.to_csv("000111.csv", index=False)
pd.read_csv("000111.csv")
2023.06.12 - [자격증공부/빅데이터분석기사] - [빅데이터분석기사][작업형1] 판다스 문법 활용 요약
2023.06.12 - [자격증공부/빅데이터분석기사] - [빅데이터분석기사][작업형2] 머신러닝 이론 및 프로세스 요약
'자격증공부 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 작업형2 기출문제 3회 (분류) (0) | 2023.06.11 |
---|---|
[빅데이터분석기사] 작업형2 기출문제 2회 (분류) (0) | 2023.06.10 |
[빅데이터분석기사] 실기시험 응시환경 및 Tip (0) | 2023.06.08 |
[빅데이터분석기사] 작업형1 문제유형 (기초통계, 그룹통계, 날짜) (0) | 2023.06.07 |
[빅데이터분석기사] 작업형1 문제유형 (이상치, 기초통계) (0) | 2023.05.24 |