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

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. SmartStore.Net、NopCommerce 全局异常处理、依赖注入、代码研究

    以下是本人最近对NopCommerce和SmartStore.net部分代码的研究和总结,主要集中于:依赖注入.异常处理.对象映射.系统缓存.日志这些方面,供大家参考. NOP 3.8 /// < ...

  2. Deck of Cards ZOJ - 2852 dp 多决策 三维 滚动更新

    题意:一个特殊21点游戏 具体http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2852 题解:建一个三维dp,表示三个卡槽分别 ...

  3. The General Query Log Binary Log

    https://dev.mysql.com/doc/refman/8.0/en/binary-log.html https://dev.mysql.com/doc/refman/8.0/en/quer ...

  4. PHP之魔术引号

    什么是魔术引号 Warning 本特性已自 PHP5.3.0起废弃并将自PHP5.4.0起移除. 当打开,所有的'(单引号),"(双引号),  (反斜线)和NULL 字符都会被自动加上一个反 ...

  5. Linux Semaphore

    目录 主要用到的几个函数 0, ftok 1, semget 2, semctl 3, semop 程序semp1.c 程序semp2.c 主要用到的几个函数 0, ftok ftok - conve ...

  6. [math] 绘制空间几何体的直观图

    这么多年,一直凭着从天而降的神来之灵感画着立体图. 而今才知道在二维平面上绘制空间几何体的直观图也是有方法的.叫做“画法几何” 1. 斜二测图 就是倾斜y轴,使y轴与x轴成45度的夹角.见: http ...

  7. Java ServiceLoader(SPI)学习

    1. 几个不错的关于ServiceLoader的文章,大家可以先参考一下 1) http://www.myexception.cn/program/1355384.html 这篇的后面的问题分析不错 ...

  8. inet_addr()和inet_ntoa()使用注意

    inet_addr():无法处理255.255.255.255,认为该ip为非法,返回-1 inet_ntoa():转换后地址存储在静态变量中,连续两次调用,第二次会覆盖第一次的值. 建议使用inet ...

  9. icon工具类

    using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...

  10. InnoDB master thread学习

    很久很久没有写博客了,工作比较忙,也没什么时间学习了,恰逢国庆放假,安心的学习一下,其实只是把之前学习过的知识再温习了一下而已.InnoDB 有众多的线程,其中非常核心的就是master thread ...