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