竞赛圈   > baseline0.81

提莫队长正在送命

算法工程师   |   数据融合
  • 关注者 2
  • 关注了

提莫队长正在送命

算法工程师   |   数据融合

# 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)


1条评论

分享

1条评论
意见反馈
关注微信公众号 关注微信公众号

扫一扫分享给周围朋友