반응형
# 제품 배송 시간에 맞춰 배송 되었는지 예측 모델 만들기
# 학습용 데이터를 이용하여 배송 예측 모형을 만든 후, 이를 평가용 데이터에 적용하여 얻은 예측 (시간에 맞춰 도착하지 않을 확률) 값을 다음과 같은 형식의 csv 파일로 생성하시오 (제출한 모델의 성능은 ROC-AUC 평가지표에 따라 채점)
# 0 정시 도착, 1 정시 도착하지 않음
# 시험환경 세팅 3개 파일 생성 (코드 변경 X)
################################
# 데이터 가져오기 & EDA
import pandas as pd
X_test = pd.read_csv('archive/X_test.csv')
X_train = pd.read_csv('archive/X_train.csv')
y_train = pd.read_csv('archive/y_train.csv')
print(X_test.shape, X_train.shape, y_train.shape)
print(X_train.head())
print(X_test.head())
print(y_train.head())
print(X_train.isnull().sum())
print(X_test.isnull().sum())
print(y_train.isnull().sum())
print(y_train['Reached.on.Time_Y.N'].value_counts())
print(X_train.info())
print(X_train.describe())
# categorical data 의 경우, trian dataset과 test dataset 의 unique한 데이터 종류를 확인해서, 만약 그 종류의 갯수가 다르다면, dataset을 합쳐서, label encoding 이나 one hot encoding 을 해주어야 한다.
print(X_train.describe(include=object))
print(X_test.describe(include=object))
# [Tip] object 타입 고유값 개수 확인 #nunique #[[대괄호 2개인 점에 유의]] # 데이터프레임의 함수임
print(X_train[['Warehouse_block','Mode_of_Shipment','Product_importance','Gender']].nunique())
# print(X_train[['Warehouse_block','Mode_of_Shipment','Product_importance','Gender']].nunique(dropna=False))
# unique()는 Series에 사용가능함.
print(X_train['Warehouse_block'].unique())
# X 데이터와 Y 데이터 target 값만 합치기
# 뒤쪽에 target을 붙여서 작업하는 이유: 데이터간의 상관관계를 직관적으로 알아보기 편하다.
df = pd.concat([X_train, y_train['Reached.on.Time_Y.N']],axis=1)
print(df.head(1)) #잘 붙었는지 확인
cond = df['Discount_offered'] > 50
print(sum(cond)) #1
print(sum(df[cond]['Reached.on.Time_Y.N'])) #2
# cond를 바꿔가면서 1과 #2의 건수를 확인해보면, cond 의 변화 (cond의 변수)에 따라 y (target) 값의 변화를 직관적으로 확인하기 좋다.
################################
# 데이터 전처리 및 피처엔지니어링
cols = X_train.select_dtypes(include='object').columns
# print(cols)
# .columns 해주면 컬럼명만 반환 받음
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
for col in cols:
X_train[col] = encoder.fit_transform(X_train[col])
X_test[col] = encoder.transform(X_test[col])
print(X_train.head())
print(X_test.head())
# train data 의 id 값은 필요없어서 drop
# test data 의 id 값는 학습 시 필요없으나 나중에 필요하므로 pop
X_train = X_train.drop('ID',axis=1)
X_test_id = X_test.pop('ID')
################################
# train_test_split
# train data로 train dataset, validation dataset 분리하기.
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train['Reached.on.Time_Y.N'], random_state=2021, test_size=0.2)
print(X_tr.shape,X_val.shape,y_tr.shape,y_val.shape)
################################
# 모델 및 평가
# 모델링 라이브러리
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
import lightgbm
#평가 라이브러리
from sklearn.metrics import roc_auc_score
model = LogisticRegression(random_state=2022)
model.fit(X_tr,y_tr)
pred = model.predict_proba(X_val)
print('LogisticRegression', roc_auc_score(y_val,pred[:,1]))
model = DecisionTreeClassifier(random_state=2022)
model.fit(X_tr,y_tr)
pred = model.predict_proba(X_val)
print('DecisionTreeClassifier', roc_auc_score(y_val,pred[:, 1]))
model = RandomForestClassifier(random_state=2022)
model.fit(X_tr,y_tr)
pred = model.predict_proba(X_val)
print('RandomForestClassifier', roc_auc_score(y_val,pred[:,1]))
model=XGBClassifier(random_state=2022)
model.fit(X_tr,y_tr)
pred = model.predict_proba(X_val)
print('XGBClassifier', roc_auc_score(y_val,pred[:,1]))
# model = lightgbm.LGBMClassifier(random_state=2022)
# model.fit(X_tr,y_tr)
# pred = model.predict_proba(X_val)
# print('LGBMClassifier', roc_auc_score(y_val,pred[:,1]))
################################
# test data 예측 및 제출
pred = model.predict_proba(X_test)
submit = pd.DataFrame({
'ID' : X_test_id,
'Reached.on.Time_Y.N' : pred[:,1]
})
print(submit.head())
submit.to_csv('archive/20230611_18.csv',index=False)
#index=False 안해주면 index외에 unnamed 같은게 하나 더나온다
submit_test = pd.read_csv('archive/20230611_18.csv')
print(submit_test.head())
반응형
'IT,SW,Data,Cloud,코딩 > Python' 카테고리의 다른 글
20230611 빅분기 작업형1 모의문제 (0) | 2023.06.11 |
---|---|
20230611 작업형1 모의문제1 (0) | 2023.06.11 |
20230611 빅분기 3회 실기 기출 작업형2 (0) | 2023.06.11 |
20230611 빅분기 3회 기출 작업형1 (0) | 2023.06.11 |
20230610 파이썬공부 - 작업형 1 실습 (0) | 2023.06.10 |
20230610 파이썬공부 - 작업형2 (0) | 2023.06.10 |
20230610 파이썬 공부 - 작업형1 (0) | 2023.06.10 |
2023년6월9일 머신러닝-Regression (0) | 2023.06.10 |
댓글