자격증/빅데이터분석기사
[빅데이터분석기사 실기] 작업형 2 연습문제 풀이
망삼드
2023. 6. 22. 00:56
실기 환경에 나와잇는 작업형 2 연습문제 풀이입니다
#결측치 확인
X_train['환불금액'] = X_train['환불금액'].fillna(0)
X_test['환불금액'] = X_test['환불금액'].fillna(0)
print(X_train.isna().sum())
#라벨인코더
from sklearn.preprocessing import LabelEncoder
label = ['주구매상품','주구매지점']
X_train[label] = X_train[label].apply(LabelEncoder().fit_transform)
X_test[label] = X_test[label].apply(LabelEncoder().fit_transform)
print(X_train['주구매지점'].value_counts())
#카테고리
category = ['주구매지점']
for i in category:
X_train[i] = X_train[i].astype('category')
X_test[i] = X_test[i].astype('category')
X_train = pd.get_dummies(X_train)
X_test = pd.get_dummies(X_test)
print(X_train.head())
임의로 변수 선택해서 카테고리를 만들어줍니다
어차피 이 시험은 이런 것들을 할 수 있는지확인하는 거기때문에 임의로 선택했습니다. 주구매지점이 카테고리를 만들기 적당해 지정해줍니다
#스케일
from sklearn.preprocessing import MinMaxScaler
scaler= ['총구매액','최대구매액','환불금액','내점일수','내점당구매건수','주말방문비율','구매주기']
min = MinMaxScaler()
min.fit(X_train[scaler])
#X_test도 해줘야한다
X_train[scaler] = min.transform(X_train[scaler])
X_test[scaler] = min.transform(X_test[scaler])
뭔가 적용할때 X_test에도 추가해줘야합니다
#데이터분리
from sklearn.model_selection import train_test_split
#두번째는 정답이 있는 인덱스만 넣을것
X_train, X_valid, y_train,y_valid = train_test_split(X_train,y_train['gender'],test_size=0.2,random_state=42)
print(X_train.shape,X_valid.shape)
Train set과 valid set을 나눠줬습니다
#모형 학습 및 앙상블 및 체크
#모형 학습
#pd_dataFrame으로 만들기
from sklearn.linear_model import LogisticRegression
model1 = LogisticRegression()
model1.fit(X_train,y_train)
pred1 = pd.DataFrame(model1.predict_proba(X_valid))
from sklearn.ensemble import RandomForestClassifier
model2 = RandomForestClassifier()
model2.fit(X_train,y_train)
pred2 = pd.DataFrame(model2.predict_proba(X_valid))
from sklearn.ensemble import VotingClassifier
model3= VotingClassifier(estimators= [('logistic',model1),('rf',model2)],voting = 'soft')
model3.fit(X_train,y_train)
pred3 = pd.DataFrame(model3.predict_proba(X_valid))
from sklearn.metrics import roc_auc_score
print('로지스틱',roc_auc_score(y_valid,pred1.iloc[:,1]))
print('랜포',roc_auc_score(y_valid,pred2.iloc[:,1]))
print('보팅',roc_auc_score(y_valid,pred3.iloc[:,1]))
보팅의 점수가 제일 높으니, test로 제출합니다
#파일 만들어 제출하기
result = pd.DataFrame(model3.predict_proba(X_test))
result = result.iloc[:,1]
pd.DataFrame({'custid' : X_test['cust_id'],'gender': result}).to_csv('00300.csv',index = False)
check = pd.read_csv('00300.csv')
print(check.head())