1.读入数据
from sklearn.model_selection import GridSearchCV, KFold, train_test_split
import pandas as pd
import numpy as np
from sklearn.metrics import precision_score,roc_auc_score
from sklearn.metrics import accuracy_score,make_scorer
from sklearn.metrics import precision_score#这个就可以用评分函数了
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
data_all=pd.read_csv(r'C:\Users\lxy\Desktop\data.csv',encoding='gbk')
2.对于每一行都相同的一组特征是没有用的.名字.顾客编号之类的也没有用,将他们删除
data_all.drop(['id','custid', 'trade_no', 'bank_card_no', 'id_name'], axis=1, inplace=True)
3.查看缺失值处理缺失值
#看下哪些缺失值多
data_all.isnull().sum().sort_values(ascending=False)
结果如下
student_feature 2998
cross_consume_count_last_1_month 426
latest_one_month_apply 304
query_finance_count 304
latest_six_month_apply 304
latest_three_month_apply 304
query_sum_count 304
query_cash_count 304
latest_query_time 304
query_org_count 304
apply_credibility 304
apply_score 304
latest_query_day 304
latest_one_month_loan 297
loans_score 297
loans_credibility_behavior 297
loans_count 297
loans_settle_count 297
loans_overdue_count 297
loans_org_count_behavior 297
consfin_org_count_behavior 297
loans_cash_count 297
loans_latest_day 297
latest_three_month_loan 297
loans_org_count_current 297
latest_six_month_loan 297
consfin_max_limit 297
consfin_product_count 297
consfin_org_count_current 297
consfin_credibility 297
...
trans_top_time_last_6_month 8
trans_amount_increase_rate_lately 3
trans_activity_month 2
trans_activity_day 2
transd_mcc 2
trans_days_interval 2
middle_volume_percent 2
regional_mobility 2
rank_trad_1_month 2
number_of_trans_from_2011 2
first_transaction_time 2
historical_trans_day 2
first_transaction_day 2
reg_preference_for_trad 2
top_trans_count_last_1_month 2
trans_day_last_12_month 2
low_volume_percent 2
avg_consume_less_12_valid_month 2
is_high_user 0
repayment_capability 0
abs 0
avg_price_last_12_month 0
historical_trans_amount 0
max_cumulative_consume_later_1_month 0
pawns_auctions_trusts_consume_last_1_month 0
pawns_auctions_trusts_consume_last_6_month 0
status 0
source 0
take_amount_in_later_12_month_highest 0
trans_amount_3_month 0
Length: 85, dtype: int64
对student_featurea单独处理,看下他的值
data_all['student_feature'].value_counts()
结果如下,可以看出这是一个分类的特征。由于这里不清楚具体代表什么。我试试用1替代好了。然后我会再尝试用0替代表示另一个分类,最后对于其余的缺失值大多数是数值型数据,用平均数填充.
1.0 1754
2.0 2
Name: student_feature, dtype: int64
data_all['student_feature'].fillna(0,inplace=True)
data_all.fillna(data_all.mean(),inplace=True)
4.对数据类型处理
#对房名进行one-hot编码
data_all['reg_preference_for_trad'] = data_all['reg_preference_for_trad'].map({'境外':0,'一线城市':1, '二线城市':2, '三线城市':3})
#对日期loans_latest_time,latest_query_time细分为时间和日期
temp1=pd.DatetimeIndex(data_all['loans_latest_time'])
data_all['date1']=temp.date
data_all['time1']=temp1.time
temp2=pd.DatetimeIndex(data_all['latest_query_time'])
data_all['date2']=temp2.date
data_all['time2']=temp2.time
5.划分数据集得出结果
x = data_all.drop(columns=['status'])
y = data_all['status']
x_train,x_test,y_train,y_test = train_test_split(train_x,train_y,test_size=0.3,random_state=2018)
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(random_state=2018)
lr_model=lr.fit(x_train,y_train)
lr_model.score(x_test,y_test)
时间有点赶做的不好请见谅,后续会更改