빅데이터분석기사/코드

[빅데이터분석기사] 실기 3회 2유형 풀이(Python)

EveningPrimrose 2023. 6. 16. 01:43
반응형

여행 보험 패키지 데이터

 - 예측할 값(y) : TravelInsurance (여행보험 패키지를 구매했는지 여부, 0:구매안함, 1:구매)

 - 평가 : roc-auc 평가지표

 - data : t2-1-train.csv, t2-a-test.csv

 - 제출형식

# 라이브러리 불러오기
import pandas as pd

# 데이터 불러오기
train = pd.read_csv("../input/big-data-analytics-certification/t2-1-train.csv")
test = pd.read_csv("../input/big-data-analytics-certification/t2-1-test.csv")

# EDA
# 데이터 사이즈
train.shape, test.shape

# 샘플 확인
train.head()

# type 확인
train.info()

# 카테고리 수 확인
train.describe(include="object")

# 카테고리 수 확인
test.describe(include="object")

# Employment Type 컬럼 카테고리
train['Employment Type'].value_counts()

# Employment Type 컬럼 카테고리
train['Employment Type'].value_counts()

# 수치형 통계 값
train.describe(exclude = "object")

# 수치형 통계 값
train.describe(exclude = "object")

# 결측치 확인
train.isnull().sum()

# 결측치 확인
test.isnull().sum()

# target
train['TravelInsurance'].value_counts()

# 결측치 처리
train['AnnualIncome'] = train['AnnualIncome'].fillna(train['AnnualIncome'].mean())
test['AnnualIncome'] = test['AnnualIncome'].fillna(train['AnnualIncome'].mean())

# target 값 변수에 옮기기
target = train.pop('TravelInsurance')

# 데이터 합치기
df = pd.concat([train, test])
df.shape

# 레이블 인코딩
from sklearn.preprocessing import LabelEncoder

cols = df.select_dtypes(include="object").columns
le = LabelEncoder()

for col in cols:
	df[col] = le.fit_transform(df[col])

# train test 다시 분리
train = df[:train.shape[0]].copy()
test = df[train.shape[0]:].copy()

# 스케일
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()

train['AnnualIncome'] = scaler.fit_transform(train[['AnnualIncome']])
test['AnnualIncome'] = scaler.transform(test[['AnnualIncome']])

# 검증 데이터 분리
from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(train, target, test_size=0.2, random_state=2022)
X_train.shape, X_val.shape, y_train.shape, y_val.shape

# 모델 학습 및 평가
# 의사결정나무
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(random_state=2022)
model.fit(X_train, y_train)
pred = model.predict_proba(X_val)

# 평가
from sklearn.metrics import roc_auc_score
roc_auc_score(y_val, pred[:,1])

# 랜덤포레스트
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state=2022)
model.fit(X_train, y_train)
pred = model.predict_proba(X_val)
roc_auc_score(y_val, pred[:, 1])

# xgboost
import xgboost as xgb
model = xgb.XGBRFClasiifier(random_state=2022)
model.fit(X_train, y_train)
pred = model.predict_proba(X_val)
roc_auc_score(y_val, pred[:, 1])

# 예측
# test 데이터 예측
model = RandomForestClassifier(random_state=2022)
model.fit(X_train, y_train)
pred = model.predict_proba(test)

# 예측한 데이터 -> 데이터프레임으로
submit = pd.DataFrame()
submit['id'] = test['id']
submit[TravelInsurance'] = pred[:, 1]

# 예측한 데이터 확인
submit.head()

# csv 저장
submit.to_csv("2022.csv", index=False)

# csv 확인
pd.read_csv("2022.csv")
반응형