제2유형 작업은 머신러닝 학습을 통해 평가지표 성능을 비교하고 예측값을 산출하는 문제입니다. 빅데이터분석 실기 체험은 ROC-AUC 평가지표 사용하여 성능점검을 하도록 질문하고 있습니다. 학습데이터에는 성별이 없지만 평가데이터는 성별 데이터가 업습니다. 학습데이터만으로 학습한 모델로 평가데이터에 없는 성별 데이터를 예측하는 문제입니다.
- 결론
- 결과는 구글 Gemini 및 MS Copliot 별로 ROC-AUC 값 약간 상이
- MS Copliot ROC-AUC : 0.6506
- 구글 Gemini ROC-AUC : 0.6414
- ROC-AUC 가 높고 코드 상대적 용이한 MS Copiolt 코드 채택
- MS Copliot 코드 : 상대적 용이
- 구글 Gemini 코드 : 상대적 복잡
- 결과는 구글 Gemini 및 MS Copliot 별로 ROC-AUC 값 약간 상이
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
train.fillna(0, inplace=True) # 결측값
test.fillna(0, inplace=True) # 결측값
from sklearn.preprocessing import LabelEncoder # 범주데이터 정규화
category_cols = ['주구매상품', '주구매지점']
for col in category_cols:
le = LabelEncoder()
train[col] = le.fit_transform(train [col])
test[col] = le.fit_transform(test[col])
x = train.drop(columns=['성별']) # 독립변수
y = train['성별'] # 목표변수
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(x,y,test_size=0.2,random_state=42,stratify=y)
from sklearn.preprocessing import MinMaxScaler # 2) 학습 대상 데이터(train) 정규화 (구지 불필요)
x_train_scaled = MinMaxScaler().fit_transform(x_train)
print(type(x_train)) # 2800 건 데이터프레임
print(type(x_train_scaled)) # 2800 건 배열
# print(y_train) # 3) 정답 데이터 생성 (이미 있을 경우 별도 처리 없음)
from sklearn.ensemble import RandomForestClassifier # 4) 모델 생성
model = RandomForestClassifier()
print(type(x_train_scaled)) # 2800 건 배열
print(len(x_train_scaled)) # 2800 건 데이터 프레임
print(len(y_train)) # 2800 건 시리즈
model.fit(x_train, y_train) # 5) 모델 학습
from sklearn.metrics import roc_auc_score # 6) 모델 예즉 및 ROC 성능 출력
pred = model.predict(x_val)
print(len(x_val)) # 700 건 데이터 프레임
print(len(y_val)) # 700 건 시리즈
print(len(pred)) # 700 건 배열
print(roc_auc_score(y_val, pred))
# 제출 데이터(test) 에 예측값 산정
test_scaled = MinMaxScaler().fit_transform(test) # 제출 데이터(test) 정규화 (구지 불필요)
test_pred = model.predict(test)
pd.DataFrame({'회원ID': test.회원ID, 'label': test_pred } ).to_csv('003000000.csv', index=False) # 7) 정답 생성
result = pd.read_csv('003000000.csv')
print(result)
체험문제 정리 결과를 Copilot 에게 질문
제공된 데이터는 백화점 고객이 1년간 상품을 구매한 속성 데이터이다.
제공된 학습용 데이터 (data/customer_train.csv)를 이용하여 백화점 구매고객의 성별을 예측하는 모델을 개발하고,
개발한 모델에 기반하여 평가용 데이터 (data/customer_train.csv)에 적용하여 얻은 성별 예측 결과를 아래 [제출형식]에 따라 CSV 파일로 생성하라.
- 예측결과는 ROC-AUC 평가지표에 따라 평가함
- 성능이 우수한 예측 모델을 구축하기 위해서는 데이터 정재, Feature Engineering, 하이퍼 파라메터 (hyper parameter) 최적화, 모델 비교 등이 필요할 수 있음.
다만, 과적합에 유의하여야 함
[제출형식]
1) CSV 파일명 : result.csv (파일명에 디렉토리-폴더 지정불가)
2) 예측 성별 컬럼명 : pred
3) 제출 컬럼 개수 : pred 컬럼 1개
4) 평가용 데이터 개수와 예측 결과 데이터 개수 일치 : 2.482개
[제공 데이터]
1) 데이터 목록
학습용 데이터 (data/customer_train.csv) 3500개
평가용 데이터 (data/customer_train.csv) 2482개
- 평가용 데이터에는 '성별' 컬럼 미제공
[데이터 설명]
회원ID : 회원고유번호
총구매액 : 총 구매금액(원)
최대구매액 : 구매건당 최대구매금액 (원)
환불금액 : 환불금액(원)
주구매상품 : 주로 구매한 품목 (42개 품목 범주)
주구매지점 : 주로 구매한 지점명 (24개 지점 범주)
방문일수 : 고객이 방문한 일수(일)
방문당구매건수 : 총구매건수/방문일수
주말방문비율 : 주말에 방문한 비율
구매주기 : 구매 주기(일)
성별 : 고객 성별 (0:여자, 1:남자)
[csv 파일 형식]
- csv 파일명 : result.csv
- 고객 성별 예측 결과 컬럼명 : pred (0:여자, 1:남자)
- pred 컬럼 데이터 개수 2482개
- csv 파일 화인 방법 : 생성된 파일을 아래 예시에 따라 출력하여 확인
import pandas ad pd
result = pd.read_csv("result.csv")
print(result)
[코드 시작]
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
이 문제를
주구매상품과 주구매지점에 대한 범주화 처리와
결측값 전처리를 하되 deprecated 발생하지 않게 하고
RandomForest 모델을 사용한
python 코드로 작성해줘
MS Copilot
- Copilot 문의 과정
- Copilot 최종결과 코드 (시험암기용)
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
# Load the training data
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
# Combine train and test data for preprocessing
combined_data = pd.concat([train, test], axis=0)
# Fill missing values with median
combined_data.fillna(combined_data.median(), inplace=True)
# Encode categorical features
categorical_features = ["주구매상품", "주구매지점"]
for feature in categorical_features:
le = LabelEncoder()
combined_data[feature] = le.fit_transform(combined_data[feature])
# Split the combined data back into train and test
train = combined_data[:len(train)]
test = combined_data[len(train):]
# Features and target
X = train.drop(columns=["성별"])
y = train["성별"]
# Split into train and validation sets
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
# Initialize and train the RandomForest model
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# Predict on validation set
y_val_pred = model.predict_proba(X_val)[:, 1]
# Calculate ROC-AUC score
roc_auc = roc_auc_score(y_val, y_val_pred)
print(f"ROC-AUC score on validation set: {roc_auc:.4f}")
# Predict on test set
y_test_pred = model.predict(test.drop(columns=["성별"]))
# Create a DataFrame with predictions
result = pd.DataFrame({"pred": y_test_pred})
# Save predictions to a CSV file
result.to_csv("result.csv", index=False)
# Print success message
print("Predictions saved to result.csv")
# 최종 결과 재확인
print(pd.read_csv("result.csv"))
- Copilot 답변 빅데이터분석기사 실기 체험 에서 실행 결과
- ROC-AUC = 0.6506
- 학습된 결과 pred 건수 2,482건 확인
- 제출 클릭
구글 Gemini
- 구글 Gemini 문의 과정
- 구글 Gemini 최종결과 코드
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
# 데이터 불러오기
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
# 결측값 처리
train['환불금액'].fillna(0, inplace=True)
test['환불금액'].fillna(0, inplace=True)
# 범주형 변수 처리
le_product = LabelEncoder()
le_product.fit(train['주구매상품'])
train['주구매상품'] = le_product.transform(train['주구매상품'])
test['주구매상품'] = le_product.transform(test['주구매상품'])
le_branch = LabelEncoder()
le_branch.fit(train['주구매지점'])
train['주구매지점'] = le_branch.transform(train['주구매지점'])
test['주구매지점'] = le_branch.transform(test['주구매지점'])
# 데이터 전처리
scaler = StandardScaler()
scaler.fit(train[['총구매액', '최대구매액', '환불금액', '방문일수', '방문당구매건수', '주말방문비율', '구매주기']])
train_scaled = scaler.transform(train[['총구매액', '최대구매액', '환불금액', '방문일수', '방문당구매건수', '주말방문비율', '구매주기']])
test_scaled = scaler.transform(test[['총구매액', '최대구매액', '환불금액', '방문일수', '방문당구매건수', '주말방문비율', '구매주기']])
# 학습 및 평가
X_train, X_test, y_train, y_test = train_test_split(train_scaled, train['성별'], test_size=0.2, random_state=42)
# 모델 학습
model = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
model.fit(X_train, y_train)
# 모델 평가
score = model.score(X_test, y_test)
print("모델 정확도:", score)
# ROC AUC 평가
roc_auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
print("ROC AUC:", roc_auc)
# 예측 결과 생성
y_pred = model.predict_proba(test_scaled)[:, 1]
# 제출 파일 생성
result = pd.DataFrame({'pred': y_pred})
result.to_csv("result.csv", index=False)
# 최종 결과 재확인
print(pd.read_csv("result.csv"))
- 구글 Gemini 답변 빅데이터분석기사 실기 체험 에서 실행 결과
- ROC-AUC = 0.6414
- 학습된 결과 pred 건수 2,482건 확인
- 제출 클릭
'IT > 빅데이터분석기사(빅분기)' 카테고리의 다른 글
8회 빅분기 필기시험 면제기간 (2년) 및 실기시험 유효기간 (빅데이터분석 기사) (0) | 2024.04.14 |
---|---|
8회 빅분기 실기 시험 준비, 작업 제3유형, 구글 Gemini 및 MS Copliot (Chat GPT) 분석 (빅데이터분석 기사) (0) | 2024.04.13 |
구글 Gemini 및 MS Copliot (Chat GPT) 활용 빅데이터분석 기사(빅분기) 실기 도전 작업 제1유형 (0) | 2024.04.10 |
23년 빅데이터분석기사(빅분기) 일정 및 한국데이터검증원(데이터자격시험) 홈페이지 개편 (0) | 2023.01.25 |
필기 시험 합격 : ADsP 취득자의 5회 빅데이터분석 기사(빅분기) 자격증 도전 1.5개월차 (0) | 2022.10.17 |
댓글