用户点击广告行为预测

1.需求:网页悬浮广告是商家宣传和消费者了解促销活动的有效途径,通过分析用户产生的数据,分析用户的规律。从而判断用户是否点击广告。

2.数据描述:数据中有上万条用户记录,其中包括广告的标识、时间、广告所在平台和用户的点击行为等信息。这些数据都进行脱敏处理。

字段名称 字段含义
ID 唯一编号
A1~A3 网站的基本情况
B1~B3 广告来源情况
C1~C3 网站后台的服务器情况
D1~D2 用户使用的设备情况
E1~E29 用户的行为情况

train_label.csv文件包含两列数据:ID同train.csv,用于识别区分每条记录;label为标签,0代表企业为用户未点击了广告,1代表用户点击了广告。示例如下:
                                           ID, label
                                           0,1
                                           2,0
                                           3,0
3.python代码实现(仅为作者自己的想法,仅供参考)

代码1:查看每一列数据与结果的关联性,选取与结果相关性大的数据

from sklearn.feature_selection import f_regression
from sklearn.preprocessing import Imputer
import pandas as pd
trainFilePath = 'D:/ChromeCoreDownloads/jingsai/train.csv'
trainFilePath1= 'D:/ChromeCoreDownloads/jingsai/train_label.csv'
data = pd.read_csv(filepath_or_buffer=trainFilePath)
data1=pd.read_csv(filepath_or_buffer=trainFilePath1)
data_num = len(data)
XList = []
yList = []
for row in range(0, data_num):                  #加载全部数据
        tmp_list = []
        tmp_list.append(data.iloc[row]['A1'])
        tmp_list.append(data.iloc[row]['A2'])
        tmp_list.append(data.iloc[row]['A3'])
        tmp_list.append(data.iloc[row]['B1'])
        tmp_list.append(data.iloc[row]['B2'])
        tmp_list.append(data.iloc[row]['B3'])
        tmp_list.append(data.iloc[row]['C1'])
        tmp_list.append(data.iloc[row]['C2'])
        tmp_list.append(data.iloc[row]['C3'])
        tmp_list.append(data.iloc[row]['D1'])
        tmp_list.append(data.iloc[row]['D2'])
        tmp_list.append(data.iloc[row]['E1'])
        tmp_list.append(data.iloc[row]['E2'])
        tmp_list.append(data.iloc[row]['E3'])
        tmp_list.append(data.iloc[row]['E4'])
        tmp_list.append(data.iloc[row]['E5'])
        tmp_list.append(data.iloc[row]['E6'])
        tmp_list.append(data.iloc[row]['E7'])
        tmp_list.append(data.iloc[row]['E8'])
        tmp_list.append(data.iloc[row]['E9'])
        tmp_list.append(data.iloc[row]['E10'])
        tmp_list.append(data.iloc[row]['E11'])
        tmp_list.append(data.iloc[row]['E12'])
        tmp_list.append(data.iloc[row]['E13'])
        tmp_list.append(data.iloc[row]['E14'])
        tmp_list.append(data.iloc[row]['E15'])
        tmp_list.append(data.iloc[row]['E16'])
        tmp_list.append(data.iloc[row]['E17'])
        tmp_list.append(data.iloc[row]['E18'])
        tmp_list.append(data.iloc[row]['E19'])
        tmp_list.append(data.iloc[row]['E20'])
        tmp_list.append(data.iloc[row]['E21'])
        tmp_list.append(data.iloc[row]['E22'])
        tmp_list.append(data.iloc[row]['E23'])
        tmp_list.append(data.iloc[row]['E24'])
        tmp_list.append(data.iloc[row]['E25'])
        tmp_list.append(data.iloc[row]['E26'])
        tmp_list.append(data.iloc[row]['E27'])
        tmp_list.append(data.iloc[row]['E28'])
        tmp_list.append(data.iloc[row]['E29'])
        XList.append(tmp_list)
        yList.append(data1.iloc[row]['label'])

F = f_regression(XList, yList)     #对相关性进行计算
print(F)                      #输出每一列数据与结果的相关性

描述:图片所示的数据,是每一列数据与结果的相关性,数字越小说明,相关性越大,选择数字比较小的,图片所示的数字是科学计数法。仔细选择即可,选择完数据,下面即可进行模型训练,行为预测。

代码二:训练模型,进行行为预测

import pandas as pd
import matplotlib.pyplot as plt
import xgboost as xgb
import numpy as np
from xgboost import plot_importance
from sklearn.preprocessing import Imputer


def loadDataset(filePath):                                    #加载数据
    df = pd.read_csv(filepath_or_buffer=filePath)
    return df


def featureSet(data):                                          #根据代码一,选择训练数据集
    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]['A3'])
        tmp_list.append(data.iloc[row]['B1'])
        tmp_list.append(data.iloc[row]['B2'])
        tmp_list.append(data.iloc[row]['B3'])
        tmp_list.append(data.iloc[row]['D1'])
        tmp_list.append(data.iloc[row]['E2'])
        tmp_list.append(data.iloc[row]['E3'])
        tmp_list.append(data.iloc[row]['E5'])
        tmp_list.append(data.iloc[row]['E6'])
        tmp_list.append(data.iloc[row]['E7'])
        tmp_list.append(data.iloc[row]['E13'])
        tmp_list.append(data.iloc[row]['E15'])
        tmp_list.append(data.iloc[row]['E17'])
        tmp_list.append(data.iloc[row]['E18'])
        tmp_list.append(data.iloc[row]['E19'])
        tmp_list.append(data.iloc[row]['E21'])
        tmp_list.append(data.iloc[row]['E23'])
        tmp_list.append(data.iloc[row]['E25'])
        tmp_list.append(data.iloc[row]['E27'])
        tmp_list.append(data.iloc[row]['E29'])
        XList.append(tmp_list)
    return XList

def featureSet1(data):                   #加载label列数据
    XList=data.label.values
    return XList

def featureSet2(data):                   #加载ID列数据
    XList=data.ID.values
    return XList

def loadTestData(filePath):                                   #选择预测数据集
    data = pd.read_csv(filepath_or_buffer=filePath)
    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]['A3'])
        tmp_list.append(data.iloc[row]['B1'])
        tmp_list.append(data.iloc[row]['B2'])
        tmp_list.append(data.iloc[row]['B3'])
        tmp_list.append(data.iloc[row]['D1'])
        tmp_list.append(data.iloc[row]['E2'])
        tmp_list.append(data.iloc[row]['E3'])
        tmp_list.append(data.iloc[row]['E5'])
        tmp_list.append(data.iloc[row]['E6'])
        tmp_list.append(data.iloc[row]['E7'])
        tmp_list.append(data.iloc[row]['E13'])
        tmp_list.append(data.iloc[row]['E15'])
        tmp_list.append(data.iloc[row]['E17'])
        tmp_list.append(data.iloc[row]['E18'])
        tmp_list.append(data.iloc[row]['E19'])
        tmp_list.append(data.iloc[row]['E21'])
        tmp_list.append(data.iloc[row]['E23'])
        tmp_list.append(data.iloc[row]['E25'])
        tmp_list.append(data.iloc[row]['E27'])
        tmp_list.append(data.iloc[row]['E29'])
        XList.append(tmp_list)
    return XList


def trainandTest(X_train, y_train, X_test,id):           #对模型进行训练
    # XGBoost训练过程
    model = xgb.XGBRegressor(max_depth=8, learning_rate=0.05,min_child_weight=7,n_estimators=100, silent=False,gamma=0.2,subsample=0.8, cv=8,colsample_bytree=0.8,reg_alpha=0.01, nthread=4,objective= 'binary:logistic', scale_pos_weight=1,seed=27)
    model.fit(X_train, y_train)

    # 对测试集进行预测
    ans = model.predict(X_test)

    ans_len = len(ans)
    data_arr = []
    for row in range(0, ans_len):
        data_arr.append([int(id[row]), ans[row]])
    np_data = np.array(data_arr)

    # 写入文件
    pd_data = pd.DataFrame(np_data,columns=['ID', 'label'])
    pd_data.to_csv('D:/ChromeCoreDownloads/jingsai/submition2.csv', index=None)

if __name__ == '__main__':
    trainFilePath = 'D:/ChromeCoreDownloads/jingsai/train.csv'             #定义训练数据路径
    testFilePath = 'D:/ChromeCoreDownloads/jingsai/test.csv'                 #定义预测数据路径
    trainFilePath1= 'D:/ChromeCoreDownloads/jingsai/train_label.csv'     #定义训练集的结果路径
    data = loadDataset(trainFilePath)            #加载训练数据
    data1= loadDataset(trainFilePath1)         #加载训练集的结果
    data2=loadDataset(testFilePath)              #加载预测数据ID
    X_train = featureSet(data)                        #选择训练集数据
    y_train = featureSet1(data1)                    #选择训练集label
    X_test = loadTestData(testFilePath)        #加载预测数据
    id=featureSet2(data2)                             #选择输出数据的ID(因为预测集ID你是递增的,所以要加载原来的ID值)
    trainandTest(X_train, y_train, X_test,id)  #训练数据

备注:数据集和训练集已经上传scdn资源,可以下载。

网盘链接:https://pan.baidu.com/s/10MectoA-fpjikhxLRZC8zA

提取码:dxli

发布了26 篇原创文章 · 获赞 35 · 访问量 744

猜你喜欢

转载自blog.csdn.net/csdnliu123/article/details/105476248