zoukankan      html  css  js  c++  java
  • OGeek CTR预估比赛

     

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

    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)
    

      

  • 相关阅读:
    Ext Form
    Ext中 get、getDom、getCmp的区别
    Ext.state.Manager.setProvider(new Ext.state.CookieProvider())
    Ext BoxComponent
    Ext表单提示方式:msgTarget
    Ext.QuickTips.init()的使用
    Ext.Ajax.Request
    FitLayout
    视图Ext.Viewport和窗口Ext.Window用法
    禁用IE缓存
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/10608735.html
Copyright © 2011-2022 走看看