广告营销用户点击预测分析

零、数据集以及数据集简介以及任务分析

项目任务:

根据海量广告投放的用户点击数据,通过机器学习构建预测模型预估用户的是否进行广告点击,即给定某条广告相关的媒体、上下文内容等信息和用户标签的条件下,预测这个用户是否点击此广告。我们的任务就是通过分析数据,对于数据进行

训练数据集
train1.txt和train2.txt
两个数据集可以使用pandas读入

字段 说明
instance_id 样本id
click 是否点击
adid 广告id
advert_id 广告主id
orderid 订单id
advert_industry_inner 广告主行业
advert_name 广告主名称
campaign_id 活动id
creative_id 创意id
creative_type 创意类型
creative_tp_dnf 样式定向id
creative_has_deeplink 响应素材是否有deeplink(Boolean)
creative_is_jump 是否是落页跳转(Boolean)
creative_is_download 是否是落页下载(Boolean)
creative_is_js 是否是js素材(Boolean)
creative_is_voicead 是否是语音广告(Boolean)
creative_width 创意宽
creative_height 创意高
app_cate_id app分类
f_channel 一级频道
app_id 媒体id
inner_slot_id 媒体广告位
app_paid app是否付费
user_tags 用户标签信息,以逗号分隔
city 城市
carrier 运营商
time 时间戳
province 省份
nnt 联网类型
devtype 设备类型
os_name 操作系统名称
osv 操作系统版本
os 操作系统
make 品牌(例如:apple)
model 机型(例如:“iphone”)

一、数据预处理

1、加载检查数据

data = pd.read_csv("train1.txt",sep='\t')
data.append(pd.read_csv("train2.txt",sep='\t'))

在这里插入图片描述

(1)特殊特征

我们可以看到user_tags这个特征和其他的有很大的区别,他包含了多个特征,并且每个数据所含的user_tags的特征并不相同,所以为了方便后期处理我们先把user_tags特征从data中分离出来单独处理

user_tags = data["user_tags"]
data = data.drop("user_tags", axis=1)

(2)特殊特征的处理

由于user_tags特征较为特殊,并且长度不唯一,所以我们采用以下方式对他进行处理

1.补全空数据,这里默认为空的数据即为没有任何标签,在这里我们规定设为标签‘0’
2.统计每种用户标签在用户中出现的次数
3.取前save_n个在用户中出现的最多作为保留标签
4.假设数据条数为n,建立一个形状为(n,save_n)的二维零矩阵:user_tags_mark
5.如果第i条数据的用户标签中存在保留标签j,我们将user_tags_mark的第i行第j列置为1
6.为了方便之后对新数据进行预测,我们将标签对应的出现次数:tags_dict以及user_tags和user_tags_mark的映射关系tags_map一并保存下来
def get_tags(user_tags, save_n):
    user_tags.fillna('0', inplace=True)
    tags_dict = dict()
    for i in range(len(user_tags)):
        tl = user_tags[i].split(',')
        for t in tl:
            if t in tags_dict.keys():
                tags_dict[t] += 1
            else:
                tags_dict[t] = 1

    tags_dict = sorted(tags_dict.items(), key=lambda x:x[1], reverse=True)[:save_n]
    tags_dict = {
   
   key:value for key, value in tags_dict}
    tags_map = {
   
   key:value for value, key in enumerate(tags_dict.keys())}

    user_tags_mark = np.zeros((len(user_tags), len(tags_map)))
    for i in range(len(user_tags)):
        tl = user_tags[i].split(',')
        for t in tl:
            if t in tags_map.keys():
                user_tags_mark[i][tags_map[t]] += 1
    return user_tags, tags_dict, tags_map, user_tags_mark
            
user_tags, tags_dict, tags_map, user_tags_mark = get_tags(user_tags, 20)

(3)特殊特征处理后生成的新特征

在这里插入图片描述

2、数据类型与缺失值处理

(1)查看数据信息

data.info()

在这里插入图片描述

可以看到其中的make, model, osv, os_name, advert_industry_inner, f_channel, inner_slot_id, advert_name,app_cate_id, app_id都有缺失。但他们的补全方式不相同,其中make~advert_name的类型是object,观测数据后发现均是以字符串形式存储的数据、相关信息的缺失可以认为是由于技术手段或者用户不愿意透露导致的,所以这一部分信息的缺失本身也传达着一种信息,所以我们这里将这一类型的数据缺失标记为“NaN”,意为找不到其他数据信息。而app_cate_id, app_id数据类型为float,这里使用中位数来补全以反映大多数的情况。

注:此时的数据已经将user_tags分离出去了

(2)数据补全以及类型转换

由于计算机不能够对字符串格式的数据进行运算,所以我们要将字符串转换为计算机能够理解的标签,我们在数据补全的同时使用OrdinalEncoder将objects_list中的特征转换为标签的格式,并且将字符串和标签的对应关系保存下来(objects_cates)

objects_list = ["make", "model", "osv", "os_name", "advert_industry_inner", "f_channel", "inner_slot_id", "advert_name"]
floats_list = ["app_cate_id", "app_id"]


def Completer(data, bool_list=[], objects_list=[], floats_list=[]):
    from sklearn.preprocessing import OrdinalEncoder
    objects_cates = dict()
    flag = False
    for obj in objects_list:
        flag = True
        data[obj].fillna("NaN", inplace=True)
        
        data_cat = data[[obj]]
        encoder = OrdinalEncoder()
        data_cat = encoder.fit_transform(data_cat)
        cate_dict = dict()
        categories = encoder.categories_[0]
        for i in range(len(categories)):<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值