数据集说明
Ali_Display_Ad_Click
是阿里巴巴提供的一个淘宝展示广告点击率预估数据集
文件名称 | 注释 |
---|---|
raw_sample.csv | 原始的样本骨架 |
ad_feature.csv | 广告的基本信息 |
user_profile.csv | 用户的基本信息 |
behavior_log.csv | 用户的行为日志 |
文件说明
raw_sample.csv
-
从淘宝网站中随机抽样了 114 114 114万用户 8 8 8天内的广告展示/点击日志( 2600 2600 2600万条记录),构成原始的样本骨架
-
用前面 7 7 7天的做训练样本(
20170506-20170512
),用第 8 8 8天的做测试样本(20170513
) -
pid
是资源位
user,time_stamp,adgroup_id,pid,nonclk,clk
581738,1494137644,1,430548_1007,1,0
449818,1494638778,3,430548_1007,1,0
914836,1494650879,4,430548_1007,1,0
...
ad_feature.csv
campaign_id
是广告计划ID
adgroup_id,cate_id,campaign_id,customer,brand,price
63133,6406,83237,1,95471,170.0
313401,6406,83237,1,87331,199.0
248909,392,83237,1,32233,38.0
...
user_profile.csv
cms_segid
是微群ID
final_gender_code
为 1 1 1表示男,为 2 2 2表示女pvalue_level
是消费档次,为 1 1 1表示低档,为 2 2 2表示中档,为 3 3 3表示高档shopping_level
是购物深度,为 1 1 1表示浅层用户,为 2 2 2表示中度用户,为 3 3 3表示深度用户occupation
表示是否为大学生, 1 1 1表示是, 0 0 0表示否new_user_class_level
是城市层级
userid,cms_segid,cms_group_id,final_gender_code,age_level,pvalue_level,shopping_level,occupation,new_user_class_level
234,0,5,2,5,,3,0,3
523,5,2,2,2,1,3,1,2
612,0,8,1,2,2,3,0,
behavior_log.csv
- 本数据集涵盖了
raw_sample
中全部用户 22 22 22天内的购物行为(共七亿条记录) - 以
user + time_stamp
为key
,会有很多重复的记录,因为不同的类型的行为数据是不同部门记录的,在打包到一起的时候,实际上会有小的偏差(即两个一样的time_stamp
实际上是差异比较小的两个时间) btag
是行为类型,ipv
表示浏览,cart
表示加入购物车,fav
表示喜欢,buy
表示购买
user,time_stamp,btag,cate,brand
558157,1493741625,pv,6250,91286
558157,1493741626,pv,6250,91286
558157,1493741627,pv,6250,91286
...
业务需求
(1)统计广告整体点击率
(2)分析一段时间内的广告点击情况
(3)分析一天内的广告点击情况
(4)统计广告点击量Top 1,分析该广告的点击用户特征
(5)统计广告点击量Top 1,分析该广告的主要受众群体
(6)分析广告展示对用户行为的影响
需求实现
数据预处理
# -*- coding: utf-8 -*-
# @Time : 2024/12/14 19:12
# @Author : 从心
# @File : spark_taobao_display_ad_click_rate_prediction_preprocess.py
# @Software : PyCharm
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.neighbors import KNeighborsClassifier
"""
预处理 ad_feature.csv
"""
df_ad_feature = pd.read_csv('../data/ad_feature.csv')
df_ad_feature.columns = df_ad_feature.columns.str.strip()
print(df_ad_feature.head(10))
df_ad_feature.info()
for i in df_ad_feature.columns:
null_rate = df_ad_feature[i].isna().sum() / len(df_ad_feature) * 100
if null_rate > 0:
print(f'{
i} null rate: {
null_rate:.2f} %')
df_ad_feature.dropna(inplace=True)
df_ad_feature.drop_duplicates(inplace=True)
df_ad_feature['brand'] = df_ad_feature['brand'].astype(int)
print(df_ad_feature.head())
df_ad_feature.info()
df_ad_feature.to_csv('../data/ad_feature_cleaned.csv', index=False)
"""
预处理 user_profile.csv
"""
df_user_profile = pd.read_csv('../data/user_profile.csv')
df_user_profile.columns = df_user_profile.columns.str.strip()
print(df_user_profile.head(10))
df_user_profile.info()
for i in df_user_profile.columns:
null_rate = df_user_profile[i].isna().sum() / len(df_user_profile) * 100
if null_rate > 0:
print(f'{
i} null rate: {
null_rate:.2f} %')
new_user_class_level = df_user_profile.loc[:, 'new_user_class_level'].values.reshape(-1, 1)
si = SimpleImputer(strategy='most_frequent')
df_user_profile.loc[:, 'new_user_class_level'] = si.fit_transform(new_user_class_level)
columns = ['userid', 'cms_segid', 'cms_group_id', 'final_gender_code', 'age_level',
'shopping_level', 'occupation', 'new_user_class_level', 'pvalue_level']
df_user_profile = df_user_profile[columns]
pvalue_level_null = df_user_profile.loc[df_user_profile['pvalue_level'].isnull().values == True]
pvalue_level_no_null = df_user_profile.loc[df_user_profile['pvalue_level'].isnull().values == False]
X_train, y_train = pvalue_level_no_null.iloc[:, :-1], pvalue_level_no_null.iloc[:, -1]
knn = KNeighborsClassifier(n_neighbors=3, weights='distance')
knn.fit(X_train, y_train)
X_test = pvalue_level_null.iloc[:, :-1]
y_test = knn.predict(X_test)
y_test = pd.DataFrame(y_test)
y_test.columns = ['pvalue_level']
X_test.reset_index(drop=True, inplace=True)
pvalue_level_null = pd.concat([X_test, y_test], axis=1)
df_user_profile = pd.concat([pvalue_level_no_null, pvalue_level_null], ignore_index=False)
print(df_user_profile.head(10))
df_user_profile.info()
df_user_profile.to_csv('../data/user_profile_cleaned.csv', index=False)
"""
预处理 raw_sample.csv
"""
df_raw_sample = pd.read_csv('../data/raw_sample.csv', nrows=500000)
df_raw_sample.columns = df_raw_sample.columns.str.strip()
print(df_raw_sample.head(10))
df_raw_sample.info()
for i in df_raw_sample.columns:
null_rate = df_raw_sample[i].isna().sum() / len(df_raw_sample) * 100
if null_rate > 0:
print(f'{
i} null rate: {
null_rate:.2f} %')
df_raw_sample.rename(columns={
'user': 'userid'}, inplace=True)
print(df_raw_sample.head(10))
df_raw_sample.info()
df_raw_sample.to_csv('../data/raw_sample_cleaned.csv', index=False)
"""
预处理 behavior_log.csv
"""
df_behavior_log = pd.read_csv('../data/behavior_log.csv', nrows=500000)
df_behavior_log.columns = df_behavior_log.columns.str.strip()
print(df_behavior_log.head(10))
df_behavior_log.info()
for i in df_behavior_log.columns:
null_rate = df_behavior_log[i].isna(