特征工程:将所有数据拼接到一起做特征,等到处理完,再按索引拆分数据

1.数据分析

查看标签分布:发现valid与testa、testb的分布相似,说明valid与testa的查询时间比较接近,作为验证集线下比较可信.

2.修正数据类型、缺失值

修正空的query_prediction为'{}';
将label改为int,因为后面要求和
对query_prediction做编码LabelEncoder() --diction_label
去除重复非统计量特征label

解析query_prediction字典:
将字典的字符串转换成浮点数 --query_prediction
得到概率最大对应的预测值 --max_query_prediction_keys
取出字典的keys和values --query_prediction_keys、query_prediction_values

解析prefix、title、query:
对prefix分词 --prefix_jieba
对title分词 --title_jieba
对query分词 --query_jieba

文字转换成拼音:这里只需要处理用户的查询词就好了
prefix_pinyin --prefix_pinyin

去掉prefix、title中的空格,转换成大小写:
去掉prefix中的空格 -- prefix_fix
去掉title中的空格 --title_fix
去掉query中的空格 --query_fix
去掉query_prediction_keys中的空格 --query_prediction_keys_fix

length特征:
求prefix的长度 --prefix_length
求title的长度 --title_length
求max_query_prediction的长度 --max_query_prediction_keys_length
求query_prediction_values的长度 --query_prediction_values_length

nunique特征:
prefix相同,title不同的个数:prefix_nunique_title
prefix相同,tag不同的个数:prefix_nunique_tag

title相同,prefix不同的个数:title_nunique_prefix
title相同,tag不同的个数:title_nunique_tag
title相同,query不同的个数:title_nunique_query
title相同,prefix_pinyin不同的个数:title_nunique_prefix_pinyin

tag相同,prefix不同的个数:tag_nunique_prefix
tag相同,title不同的个数:tag_nunique_title
tag相同,max_query不同的个数:tag_nunique_max_query

max_query_prediction_keys相同,prefix不同的个数:query_nunique_prefix
max_query_prediction_keys相同,title不同的个数:query_nunique_title
max_query_prediction_keys相同,tag不同的个数:query_nunique_tag
max_query_prediction_keys相同,prefix_pinyin不同的个数:nunique_prefix_pinyin

prefix_pinyin相同,prefix不同的个数:prefix_pinyin_nunique_prefix
prefix_pinyin相同,title不同的个数:prefix_pinyin_nunique_title
prefix_pinyin相同,tag不同的个数:prefix_pinyin_nunique_tag
prefix_pinyin相同,query不同的个数:prefix_pinyin_nunique_query

判断prefix,tag,query是否在title中
prefix_isin_title
tag_isin_title
query_isin_title

计算prefix、title与query_prediction_keys的相似度【list】
Levenshtein.distance(str1, str2):计算编辑距离,描述由一个字符串转化成另外一个字符串最少的操作次数,包括插入、删除、替换;
Levenshtein.ratio(str1, str2):计算莱文斯坦比,计算r=(sum-ldist)/sum,sum是两个字符串长度综合,ldist是类编辑距离,跟上面的编辑距离有一点不同,2中三种操作每个操作+1,而在此处,删除、插入仍然+1,但是替换+2.

prefix_fix与query_prediction_keys的编辑距离、莱文斯坦比、最长连续子串的长度、最长公共子序列长度:
prefix_fix_query_prediction_keys_ratio_list
prefix_fix_query_prediction_keys_distance_list
prefix_fix_query_prediction_keys_lcsubstr_lens_list
prefix_fix_query_prediction_keys_lcseque_lens_list

title_fix与query_prediction_keys的编辑距离、莱文斯坦比、最长连续子串的长度、最长公共子序列长度:
title_fix_query_prediction_keys_ratio_list
title_fix_query_prediction_keys_ratio_list
title_fix_query_prediction_keys_ratio_list
title_fix_query_prediction_keys_ratio_list

prefix/title与query_prediction_keys相似度的list与query_prediction_values的乘积的list:相似度 * 概率
prefix_fix__query_prediction_values_mutiple_ratio_list
prefix_fix__query_prediction_values_mutiple_distance_list
prefix_fix__query_prediction_values_mutiple_lcsubstr_lens_list
prefix_fix__query_prediction_values_mutiple_lcseque_lens_list

title_fix__query_prediction_values_mutiple_ratio_list
title_fix__query_prediction_values_mutiple_ratio_list
title_fix__query_prediction_values_mutiple_ratio_list
title_fix__query_prediction_values_mutiple_ratio_list

计算上面计算得到的list的统计特征:max/min/mean/std
prefix_fix_query_prediction_keys_ratio_list_max/min/mean/std
prefix_fix_query_prediction_keys_distance_list_max/min/mean/std
prefix_fix_query_prediction_keys_lcsubstr_lens_list_max/min/mean/std
prefix_fix_query_prediction_keys_lcseque_lens_list_max/min/mean/std

title_fix_query_prediction_keys_ratio_list_max/min/mean/std
title_fix_query_prediction_keys_ratio_list_max/min/mean/std
title_fix_query_prediction_keys_ratio_list_max/min/mean/std
title_fix_query_prediction_keys_ratio_list_max/min/mean/std

prefix_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
prefix_fix__query_prediction_values_mutiple_distance_list_max/min/mean/std
prefix_fix__query_prediction_values_mutiple_lcsubstr_lens_list_max/min/mean/std
prefix_fix__query_prediction_values_mutiple_lcseque_lens_list_max/min/mean/std

title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std
title_fix__query_prediction_values_mutiple_ratio_list_max/min/mean/std

计算prefix/title/max_query_prediction_keys两两之间的相似度:
【此处,有点问题,应该是max才对啊???】
ratio_similarity_prefix_fix_with_title_fix
distance_similarity_prefix_fix_with_title_fix
lcsubstr_lens_similarity_prefix_fix_with_title_fix
lcseque_lens_similarity_prefix_fix_with_title_fix

ratio_similarity_prefix_fix_with_query_fix
distance_similarity_prefix_fix_with_query_fix
lcsubstr_lens_similarity_prefix_fix_with_query_fix
lcseque_lens_similarity_prefix_fix_with_query_fix

ratio_similarity_title_fix_with_query_fix
distance_similarity_title_fix_with_query_fix
lcsubstr_lens_similarity_title_fix_with_query_fix
lcseque_lens_similarity_title_fix_with_query_fix

click特征
prefix/title/tag/max_query_prediction_keys相同时,click的点击次数:
prefix_click
title_click
tag_click
max_query_prediction_keys_click

二元交叉点击:
prefix、title固定,prefix的个数:prefix_title_click
prefix、tag固定,prefix的个数:prefix_tag_click
title、tag固定,title的个数:title_tag_click
title、max_query_prediction_keys固定,title的个数:title_max_query_prediction_keys_click
tag、max_query_prediction_keys固定,tag的个数:tag_max_query_prediction_keys_click
prefix、title、tag固定,prefix的个数:prefix_title_tag_click

将tag、prefix、title编码
encoder = preprocessing.LabelEncoder()
not_zip_all_data['tag'] = encoder.fit_transform(not_zip_all_data.tag)
encoder = preprocessing.LabelEncoder()
not_zip_all_data['prefix'] = encoder.fit_transform(not_zip_all_data.prefix)
encoder = preprocessing.LabelEncoder()
not_zip_all_data['title'] = encoder.fit_transform(not_zip_all_data.title)

对query_prediction做编码处理
encoder = preprocessing.LabelEncoder()
not_zip_all_data['diction_label'] = encoder.fit_transform(not_zip_all_data.query_prediction)

按prefix分组,将prefix相同的,tag不同的合并起来,成为新的特征:prefix_contains_tag

对prefix_contains_tag计算词频:得到稀疏矩阵prefix_contains_tag_matrix
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
prefix_contains_tag_matrix = cv.fit_transform(not_zip_all_data.prefix_contains_tag)
from scipy import sparse
sparse.save_npz('prefix_contains_tag.npz',prefix_contains_tag_matrix)

转换率
用来5折的思想,其中任意一折的转换率等于其他四折的转换率
prefix_convert
title_convert
tag_convert
max_query_prediction_keys_convert
prefix_pinyin_convert
prefix_fix_convert

prefix_title_convert
prefix_tag_convert
title_tag_convert

prefix_title_tag_convert

对query_prediction里面的每一个关键词做分词:query_prediction_jieba

3. 模型训练

clf = lgb.LGBMClassifier(
boosting_type = 'gbdt', num_leaves = 64, reg_alpha = 5, reg_lambda = 5,
n_estimators = 4053, objective = 'binary',
subsample = 0.7, colsample_bytree = 0.7, subsample_freq = 1,
learning_rate = 0.05, random_state = 8012, n_jobs = -1) clf.fit(train_data, labels, eval_set = [(train_data, labels)], verbose = 50)

  

OGeek CTR预估的更多相关文章

  1. 【项目】百度搜索广告CTR预估

    -------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...

  2. CTR预估评价指标介绍

    1 离线指标 1.1 LogLoss 1.1.1 KL散度 logloss使用KL散度来计算.设样本的真实分布为P,预测分布为Q,则KL散度定义如下: 这里可以通俗地把KL散度理解为相同事件空间里两个 ...

  3. 【项目】搜索广告CTR预估(二)

    项目介绍 给定查询和用户信息后预测广告点击率 搜索广告是近年来互联网的主流营收来源之一.在搜索广告背后,一个关键技术就是点击率预测-----pCTR(predict the click-through ...

  4. 【项目】搜索广告CTR预估(一)

    本文介绍CTR相关基础知识. 一.广告投放系统 广告系统包含多个子系统.除了上图所示的广告投放系统外,还包含商业系统(广告库的获得),统计系统(点击展示日志的获得)等. 广告投放系统主要是面向用户的, ...

  5. 广告点击率 CTR预估中GBDT与LR融合方案

    http://www.cbdio.com/BigData/2015-08/27/content_3750170.htm 1.背景 CTR预估,广告点击率(Click-Through Rate Pred ...

  6. CTR预估中的贝叶斯平滑方法及其代码实现

    1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad)   ...

  7. CTR预估中的贝叶斯平滑方法(二)参数估计和代码实现

    1. 前言 前面博客介绍了CTR预估中的贝叶斯平滑方法的原理http://www.cnblogs.com/bentuwuying/p/6389222.html. 这篇博客主要是介绍如何对贝叶斯平滑的参 ...

  8. 为什么要用深度学习来做个性化推荐 CTR 预估

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...

  9. 微软的一篇ctr预估的论文:Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine。

    周末看了一下这篇论文,觉得挺难的,后来想想是ICML的论文,也就明白为什么了. 先简单记录下来,以后会继续添加内容. 主要参考了论文Web-Scale Bayesian Click-Through R ...

随机推荐

  1. Windows 10 Install rabbitmq-server-3.6.9

    rabbitmq下载 http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9.exe otp插件下载 ...

  2. SPRING的事务配置详解

    spring事务配置的两种方式: 1.基于XML的事务配置.2.基于注解方式的事务配置. 前言:在我们详细介绍spring的两种声明式事务管理之前,我们需要先理解这些概念 1)spring的事务管理是 ...

  3. API(三)之Class-based Views

    使用基于类的视图重写API 我们首先将根视图重写为基于类的视图.所有这一切都涉及到重构views.py. from snippets.models import Snippet from snippe ...

  4. HTTP Error 400. The request hostname is invalid

    HTTP Error 400. The request hostname is invalid 错误, 检查服务的iis服务得知,是因为在绑定主机和端口的那一步时也指定了相应的域名. 解决办法: 去掉 ...

  5. [No000018E]Vim快速跳转任意行、任意列以及高亮显示当前行、当前列方法-Vim使用技巧(3)

    vim提供了丰富的快速跳转任意行.任意列的方法,方便高效地移动光标,定位文件位置. 一.Vim行跳转 使用vim查看文件时,使用以下命令可以快速跳转文件首.尾行,方便对整个文件有个全局把握. 1.1 ...

  6. Scss基础用法

    Scss基础用法 一.注释用法: (1)//comment:该注释只是在.scss源文件中有,编译后的css文件中没有. (2)/! /:重要注释,任何style的css文件中都会有,一般放置css文 ...

  7. 【作业】DS稀疏矩阵

    写了两个小时,书上代码好难看啊 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #in ...

  8. 创建ReactNative的iOS项目

    http://reactnative.cn/docs/integration-with-existing-apps/ 1.安装好ReactNative开发环境 2.安装好CocoaPods 3.创建项 ...

  9. instrument之Time Profiler总结

    一.工欲善其事必先利其器 time profile时间分析工具用来检测应用CPU的使用情况,可以看到应用程序中各个方法正在消耗CPU时间,使用大量CPU不一定是个问题.客户端中动画就对CPU依赖就非常 ...

  10. RHEL5.5的安装文档

    ---恢复内容开始--- 1.1 安装操作系统 (1) 按“ENTER”键,进入图形模式安装: (2) 检测CD,点击“Skip”跳过: (3) 安装界面显示,点击“Next”: (4) 选择语言为“ ...