# 출력을 원하실 경우 print() 함수 활용
# 예시) print(df.head())

# getcwd(), chdir() 등 작업 폴더 설정 불필요
# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가

import pandas as pd

train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")

# 사용자 코딩

pd.set_option('display.max_columns', None)

# print(train.shape, test.shape)
# print(train.info(), test.info())
# print(train.isna().sum(), test.isna().sum())

train = train.drop(['회원ID'], axis = 1)
test = test.drop(['회원ID'], axis = 1)


train_value1 = train['환불금액'].mean()
# print(train_value1)
train['환불금액'] = train['환불금액'].fillna(train_value1)
test['환불금액'] = test['환불금액'].fillna(train_value1)

target = train.pop('성별')

# print(train.isna().sum(), test.isna().sum())

cols = train.select_dtypes('O').columns
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for col in cols:
	train[col] = le.fit_transform(train[col])
	test[col] = le.fit_transform(test[col])

	
# from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
# scaler = RobustScaler()
# cols = train.select_dtypes(exclude = 'O').columns
# train[cols] = scaler.fit_transform(train[cols])
# test[cols] = scaler.transform(test[cols])
# print(train.shape, test.shape)

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 = 1234, stratify = target)
# print(X_train.shape, X_val.shape, y_train.shape, y_val.shape)

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, BaggingClassifier
from lightgbm import LGBMClassifier

dtr = DecisionTreeClassifier(max_depth = 3, min_samples_leaf = 20)
rdm = RandomForestClassifier(n_estimators = 500,
														random_state = 2022)
model_rdm = rdm.fit(X_train, y_train)
bag = BaggingClassifier(base_estimator = dtr,
												n_estimators = 500,
											 random_state = 2022)
model_bag = bag.fit(X_train, y_train)
lgb = LGBMClassifier(n_estimators = 500,
										 verbose = -1,
										random_state = 2022)
model_lgb = lgb.fit(X_train, y_train)

from sklearn.metrics import roc_auc_score
rdm_score = model_rdm.predict_proba(X_val)[:,1]
rdm_auc = roc_auc_score(y_val, rdm_score)
print(rdm_auc)
bag_score = model_bag.predict_proba(X_val)[:,1]
bag_auc = roc_auc_score(y_val, bag_score)
print(bag_auc)
lgb_score = model_lgb.predict_proba(X_val)[:,1]
lgb_auc = roc_auc_score(y_val, lgb_score)
print(lgb_auc)

y_pred = model_bag.predict(test)
obj = {'pred':y_pred}
result = pd.DataFrame(obj)

result.to_csv('result.csv', index = False)

actual = pd.read_csv('result.csv')
print(actual.head())

# 답안 제출 참고
# 아래 코드는 예시이며 변수명 등 개인별로 변경하여 활용
# pd.DataFrame변수.to_csv("result.csv", index=False)
