已有账号,去登录
竞赛圈 > baseline0.81
# coding: utf-8
# In[1]:
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import seaborn as sns
import os
# In[2]:
##read_data###
action_train=pd.read_csv('./data/trainingset/action_train.csv')#用户行为数据
#行为类型一共有9个,其中1是唤醒app;2~4是浏览产品,无先后关系;5~9则是有先后关系的,从填写表单到提交订单再到最后支付。
orderFuture_train=pd.read_csv('./data/trainingset/orderFuture_train.csv')#待预测数据
orderHistory_train=pd.read_csv('./data/trainingset/orderHistory_train.csv')#用户历史订单数据
userComment_train=pd.read_csv('./data/trainingset/userComment_train.csv')#用户评论数据
userProfile_train=pd.read_csv('./data/trainingset/userProfile_train.csv')#用户个人信息
action_test=pd.read_csv('./data/test/action_test.csv')
orderFuture_test=pd.read_csv('./data/test/orderFuture_test.csv')
orderHistory_test=pd.read_csv('./data/test/orderHistory_test.csv')
userComment_test=pd.read_csv('./data/test/userComment_test.csv')
userProfile_test=pd.read_csv('./data/test/userProfile_test.csv')
import time
def time_conv(x):
timeArray=time.localtime(x)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
return otherStyleTime
#action_train.actionTime=action_train.actionTime.map(lambda x: time_conv(x))
orderHistory_train.orderTime=pd.to_datetime(orderHistory_train.orderTime.map(lambda x: time_conv(x)),format="%Y-%m-%d %H:%M:%S")
orderHistory_test.orderTime=pd.to_datetime(orderHistory_test.orderTime.map(lambda x: time_conv(x)),format="%Y-%m-%d %H:%M:%S")
action_train.actionTime=pd.to_datetime(action_train.actionTime.map(lambda x: time_conv(x)),format="%Y-%m-%d %H:%M:%S")
action_test.actionTime=pd.to_datetime(action_test.actionTime.map(lambda x: time_conv(x)),format="%Y-%m-%d %H:%M:%S")
orderFuture_train.rename(columns={'orderType':'label'},inplace=True)
# In[4]:
####feature#####
##user过去是否订购过orderType
def orderHistory_feat(df):
grouped=df[['userid','orderType']].groupby('userid',as_index=False)
df_count=grouped.count()
df_count.rename(columns={'orderType':'df_count'},inplace=True)
df_sum=grouped.sum()
df_sum.rename(columns={'orderType':'df_sum'},inplace=True)
df_merge=pd.merge(df_count,df_sum,on='userid',how='left')
df_merge['rate']=df_merge['df_sum']/df_merge['df_count']
del df_merge['df_count']
df_merge.rename(columns={'df_sum':'orderHistory_feat_sum','rate':'orderHistory_feat_rate'},inplace=True)
return df_merge
def actions_orderType(df):
df['count']=1
df_count=df[['userid','count']].groupby('userid',as_index=False).count()
actionType=pd.get_dummies(df['actionType'],prefix='actionType')
df=pd.concat([df['userid'],actionType],axis=1)
df=df.groupby('userid',as_index=False).sum()
for column in range(1,df.shape[1]):
df['actionType_{}'.format(column)]=df['actionType_{}'.format(column)]/df_count['count']
return df
# action_train.head()
# In[5]:
def gen_train_feat():
actions=orderFuture_train
actions=pd.merge(actions,orderHistory_feat(orderHistory_train),on='userid',how='left')
actions=pd.merge(actions,actions_orderType(action_train),on='userid',how='left')
###add feature###
return actions
def gen_test_feat():
actions=orderFuture_test
actions=pd.merge(actions,orderHistory_feat(orderHistory_test),on='userid',how='left')
actions=pd.merge(actions,actions_orderType(action_test),on='userid',how='left')
return actions
# In[6]:
train_data=gen_train_feat()
test_data=gen_test_feat()
from sklearn.model_selection import train_test_split
train_label=train_data['label']
del train_data['label']
x_train,x_val,y_train,y_val=train_test_split(train_data,train_label,test_size=0.2,random_state=100)
import xgboost as xgb
print ('start running ....')
dtrain = xgb.DMatrix(x_train,label=y_train)
dval = xgb.DMatrix(x_val,label=y_val)
param = {'learning_rate' : 0.1,
'n_estimators': 1000,
'max_depth': 3,
'min_child_weight': 5,
'gamma': 0,
'subsample': 0.8,
'colsample_bytree': 0.8,
'eta': 0.05,
'silent': 1,
'objective':
'binary:logistic',
'scale_pos_weight':1}
num_round =200
plst = list(param.items())
plst += [('eval_metric', 'auc')]
evallist = [(dval, 'eval'), (dtrain, 'train')]
bst=xgb.train(plst,dtrain,num_round,evallist,early_stopping_rounds=100)
dtest = xgb.DMatrix(test_data)
y = bst.predict(dtest)
# In[7]:
orderFuture_test['orderType']=y
orderFuture_test.to_csv('baseline_2018_01_03.csv',index=False)