import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
train_df = pd.read_csv('訓練集所在路徑')
test_df = pd.read_csv('測試集所在路徑')
full_df = pd.concat([train_df,test_df], ignore_index=True, sort=False)
print(full_df.tail())
#資料預處理
print(sns.heatmap(full_df.isnull(), cbar=False).set_title('Heatmap'))
full_df['CUST_AGE'].fillna(full_df['CUST_AGE'].mode()[0], inplace=True)
full_df['LOAN_PERIED'].fillna(method='backfill', inplace=True, limit=None)
full_df['LOAN_AMOUNT'].fillna(method='backfill', inplace=True, limit=None)
full_df['F_INSORNOT'].fillna(method='backfill', inplace=True, limit=None)
full_df['ALL_BUYINS_N'].fillna(method='backfill', inplace=True, limit=None)
full_df['DLRSI_CNT'].fillna(method='backfill', inplace=True, limit=None)
full_df['GLASSBUYSEPARATE_CNT'].fillna(method='backfill', inplace=True, limit=None)
full_df['SII_CNT'].fillna(method='backfill', inplace=True, limit=None)
full_df['CAR_COLOR'].fillna('NA', inplace=True, limit=None)
full_df['CUST_MARRY'].fillna(0, inplace=True)
full_df['CUST_MARRY'].replace('未婚', 0, inplace=True)
full_df['CUST_MARRY'].replace('已婚', 1, inplace=True)
print(full_df.isnull().sum())
#儲存預處理完的訓練集和測試集
train_clean = full_df[full_df['IS_LOST'].notnull()]
train_clean.to_csv('train_clean.csv')
test_clean = full_df[full_df['IS_LOST'].isnull()]
test_clean.to_csv('test_clean.csv')
# 開始模組化
cardata = pd.read_csv('train_clean的路徑')
cardatavar = cardata
scaler = StandardScaler(copy=False)
scaler.fit_transform(cardatavar[['CUST_AGE', 'CAR_AGE', 'CAR_PRICE', 'LOAN_AMOUNT']])
cardatavar[['CUST_AGE', 'CAR_AGE', 'CAR_PRICE', 'LOAN_AMOUNT']] = scaler.transform(cardatavar[['CUST_AGE', 'CAR_AGE', 'CAR_PRICE', 'LOAN_AMOUNT']])
plt.figure(figsize=(8, 4))
numbox = sns.boxplot(data=cardatavar[['CUST_AGE', 'CAR_AGE', 'CAR_PRICE', 'LOAN_AMOUNT']], palette="Set2")
plt.title("Check outliers")
plt.show()
cardatavar.to_csv('cardatavar.csv')
#标簽分類
feature_cols = ['CUST_SEX', 'CUST_AGE', 'CUST_MARRY', 'BUYERPART', 'CAR_AGE',
'CAR_PRICE', 'IS_LOAN','LOAN_PERIED', 'LOAN_AMOUNT', 'F_INSORNOT', 'ALL_BUYINS_N', 'DLRSI_CNT',
'GLASSBUYSEPARATE_CNT', 'SII_CNT']
X = cardatavar[feature_cols]
y = cardatavar.IS_LOST
#邏輯斯蒂回歸算法
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, random_state=0)
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(solver='newton-cg')
logreg.fit (X_train, y_train)
y_pred = logreg.predict(X_test)
from sklearn import metrics
cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
print(cnf_matrix)
print('Accuracy:{:.2f}'.format(metrics.accuracy_score(y_test, y_pred)))
print('Precision:{:.2f}'.format(metrics.precision_score(y_test, y_pred)))
print('Recall:{:.2f}'.format(metrics.recall_score(y_test, y_pred)))
print('F1:{:.2f}'.format(metrics.f1_score(y_test, y_pred)))
#神經網絡算法
from sklearn.datasets import load_wine
wine = load_wine()
X, y = wine.data, wine.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
from sklearn. preprocessing import StandardScaler
scaler = StandardScaler() . fit(X_train)
X_train = scaler. transform(X_train)
X_test = scaler. transform(X_test)
from sklearn.neural_network import MLPClassifier
model = MLPClassifier(solver="lbfgs", hidden_layer_sizes=(100,))
model. fit(X_train, y_train)
y_predict_on_train = model .predict(X_train)
y_predict_on_test = model. predict(X_test)
from sklearn. metrics import accuracy_score
print('訓練集的準确率為: {: .2f}%'.format(100 * accuracy_score(y_train, y_predict_on_train)))
print('測試集的準确率為: {: .2f}%'.format(100 * accuracy_score(y_test, y_predict_on_test)))