1. 신유형
문제에서는 ROC-AUC로 평가합니다.
따라서 predict_proba 로 제출하는 것이 성능이 더 좋습니다.
pred = model.predict_proba(test[cols])
print(pred)
print(pred[:,1])
- 분류에서 roc-auc를 제외하고 predict를 사용하면됩니다.
- 평가지표가 주어지지 않을 수는 없습니다. 평가지표는 반드시 주어집니다. 0과 1을 제출해도 틀린답이 아니며 roc-auc 계산 기준으로 성능이 조금 떨어집니다.
- 예시 문제에서 확률이란 단어가 없고 예시 결과만 있어서 그런 것이라 생각해요! 이진분류에서 roc-auc는 1 확률값을 계산하는 평가 지표가 맞고, 그 평가지표 기준으로 성능을 높이기 위해서는 확률값을 제출하는 것이 올바른 방향입니다. 시험에서 만약 예시대로 0과 1을 제출해도 문제가 전혀 없으며 성능의 차이만 있습니다 🤗
출처: 퇴근 후 딴짓(인프런)링크
처음에는 CSV 파일 예시가 pred 01 형태라 제출형식인 줄 알았지만, 예시 결과이기 때문에 기존 평가방식에 따라, predict_proba 로 제출하면 됩니다.(성능 차이)
!제출 row 개수 꼭 확인 후 제출!
아래는 제 코드입니다. 성능평가 결과 0.6~ 나왔습니다.
대부분 평가 결과 0.6~ 이정도 나와서, 이 코드는 시험에서 평가 기준 만점 받지 않을까 싶습니다.
#4. 수치형 스케일링의 여부에서는, 차이 없었습니다.(제외 가능할 듯)
# 출력을 원하실 경우 print() 함수 활용
# 예시) print(df.head())
# getcwd(), chdir() 등 작업 폴더 설정 불필요
# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가
# 데이터 파일 읽기 예제
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
#print(help(RandomForestClassifier))
#print(dir(sklearn.metrics))
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
#1.확인
#train: float64(3), int64(6), object(2), 3500/11
#test: float64(3), int64(5), object(2), 2482/10
# test.info()
#2. 결측치 확인
# print(train.isnull().sum())
#3. 결측치 채우기
#train['환불금액'] = train['환불금액'].fillna(train['환불금액'].mean())
#test['환불금액'] = train['환불금액'].fillna(train['환불금액'].mean())
train['환불금액'] = train['환불금액'].fillna(0)
test['환불금액'] = train['환불금액'].fillna(0)
# print(train.isnull().sum())
#4. 범주형 인코딩
cols = train.select_dtypes(include='O').columns
for col in cols:
le=LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
# print(train[cols])
#5. 데이터 검증 분리
x_train = train.drop(['회원ID', '성별'], axis=1)
y_train = train['성별']
test_id = test['회원ID']
x_test = test.drop('회원ID', axis=1)
#4. 수치형 스케일링
# import numpy as np
# from sklearn.preprocessing import RobustScaler
# num_cols = x_train.select_dtypes(exclude='O').columns
# scaler = RobustScaler()
# for col in num_cols:
# x_train[col] = scaler.fit_transform(np.array(x_train[col]).reshape(-1, 1))
# x_test[col] = scaler.transform(np.array(x_test[col]).reshape(-1, 1))
x_tr, x_val, y_tr, y_val = train_test_split(x_train, y_train, test_size=0.2, random_state=44)
#6. 모델 학습
model= RandomForestClassifier(random_state=44)
# 0.5762273901808787
#model= RandomForestClassifier(n_estimators=5, max_depth=300, random_state=44)
model.fit(x_tr, y_tr)
pred = model.predict_proba(x_val)[:,1]
#6. 모델 평가
print(roc_auc_score(y_val, pred))
# 0.5736
pred = model.predict_proba(x_test)[:,1]
# print(pred)
#7. 데이터셋 생성
result = pd.DataFrame({'pred':pred})
#print(result.head())
# 답안 제출
result.to_csv('result.csv', index=False)
print(pd.read_csv("result.csv"))
2. 구유형
문제는 동일, 평가지표(auc)도 동일
구유형의 경우 아래와 같이 제출
백화점 고객의 1년 간 구매 데이터
- cust_id: 고객 ID
- gender: 고객의 성별 (0:여자, 1: 남자)
- 고객의 성별 예측값 (남자일 확률)을 다음과 같은 형식의 CSV 파일로 생성하시오
```
cust_id,gender
3500,0.267
3501,0.578
3502,0.123
```
성능이 우수한 예측 모형을 위해서는 아래 내용이 수반되어야 함
- 데이터 전처리
- Feature Engineering
- 모델링 (분류 알고리즘 사용)
- 하이퍼파라미터 튜닝 (초매개변수 최적화)
- csv제출 (확률 값)
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
# import sklearn.metrics
# dir(sklearn.metrics)
# 시험환경에서는 encoding="euc-kr"가 없어도 됨
x_train = pd.read_csv("./first/X_train.csv", encoding="euc-kr")
y_train = pd.read_csv("./first/y_train.csv")
x_test = pd.read_csv("./first/X_test.csv", encoding="euc-kr")
#1. 확인
#x_train.info()
#float64(3), int64(5), object(2)
#2. 결측치
x_train['환불금액'] = x_train['환불금액'].fillna(0)
x_test['환불금액'] = x_test['환불금액'].fillna(0)
#3. 데이터 나누기
X_train = x_train.drop('cust_id', axis=1)
y_train= y_train.drop('cust_id', axis=1)
x_test_id = x_test['cust_id']
x_test = x_test.drop('cust_id', axis=1)
#4. 범주형 인코딩
cols = ['주구매상품', '주구매지점']
for col in cols:
le=LabelEncoder()
X_train[col] = le.fit_transform(X_train[col])
x_test[col] = le.fit_transform(x_test[col])
#5. 검증 데이터 나누기
X_tr, x_val , y_tr, y_val = train_test_split(X_train,y_train, test_size=0.2, random_state=44)
#6. 모델 학습
model = RandomForestClassifier(random_state=44)
model.fit(X_tr, y_tr)
#7. 모델 평가
pred = model.predict_proba(x_val)
pred
#print(roc_auc_score(y_val, pred[:,1]))
#8. 예측 데이터셋 생성
pred = model.predict_proba(x_test)
result = pd.DataFrame({'cust_id':x_test_id, 'result': pred[:,1]})
#9. 제출
result.to_csv('result.csv', index=False)
result = pd.read_csv("result.csv")
result.head()
728x90
'IT 자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅분기] 실기 3유형 체험환경(신유형/ 구유형) 예제 풀이 (0) | 2023.11.28 |
---|---|
[빅분기] 실기 유형별 정리(문제접근 방식 모음) D-day!! (D-6 단기간 공부법) (0) | 2023.11.27 |
[빅분기] 실기 환경 팁 (0) | 2023.11.26 |
[빅분기] 실기 2유형: 머신러닝 회귀/ 분류 (0) | 2023.11.26 |
[빅분기] 실기 3유형: 분산분석 정리 (4) (0) | 2023.11.22 |