天猫用户重复购买预测——特征工程

  • 1.特征工程
    • 1.1 概念
    • 1.2 特征归一化
    • 1.3 类别型特征转换
    • 1.4 高维组合特征的处理
    • 1.5 组合特征
    • 1.6 文本表示模型
  • 2. 赛题特征工程思路
  • 3. 特征工程构造
    • 3.1 工具包导入
    • 3.2 数据读取
    • 3.3 数据压缩
    • 3.4 数据处理
    • 3.5 定义特征统计数据
    • 3.5.1 定义统计函数
    • 3.5.2 调用统计函数
    • 3.6 提取统计特征
    • 3.7 利用Countvector和TF-IDF提取特征
    • 3.8 嵌入特征
    • 3.9 Stacking分类特征
      • 3.9.1 导包
      • 3.9.2 定义stacking分类特征函数
      • 3.9.3 读取训练与验证数据
      • 3.9.4 使用lgb和xgb分类模型构造stacking特征

这两天在整理做的一些比赛的内容,再结合书籍汇总一下每一个完整的ML项目!

1.特征工程

1.1 概念


要选取具有实际物理意义的特征(深度学习除外),要能够从多方面表达或阐述一个事情(从不同角度去描述一个事情)。

1.2 特征归一化

特征归一化目的是消除数据特征之间的量纲影响,使不同指标之间具有可比性。

简单方法有:

  • 线性函数归一化
    xnorm=X−XminXmax−Xminx_{norm} = {X-X_{min} \over X_{max} - X_{min}} xnorm​=Xmax​−Xmin​X−Xmin​​
    将数据映射到[0,1]的范围内
  • 零均值归一化
    z=x−μσz = {x- \mu \over \sigma} z=σx−μ​
    将数据映射到均值为0、标准差为1的分布上

通过梯度下降求解的模型,归一化会对收敛速度产生影响,因此需要归一化数据,比如线性回归、逻辑回归、支持向量机、神经网络等,决策树一类模型不需要进行归一化处理。

1.3 类别型特征转换

类别型特征常用处理方法:

  • 序号编码
  • 独热向量编码:处理类别间不具有大小关系的特征
  • 二进制编码

1.4 高维组合特征的处理

把一阶离散特征两两组合,就构成高阶组合特征。高维组合特征处理可以提高复杂关系的拟合能力。

1.5 组合特征

简单两两组合特征,存在参数过多、过拟合等问题,可以引入决策树方法来组合特征。

1.6 文本表示模型

  • 词袋模型
  • N-gram模型
  • 主题模型
  • 词嵌入

2. 赛题特征工程思路

3. 特征工程构造

3.1 工具包导入

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import statsimport gc
from collections import Counter
import copyimport warnings
warnings.filterwarnings("ignore")%matplotlib inline

3.2 数据读取

data_path = '比赛/天猫复购预测之挑战Baseline/datasets/' # 数据路径#读取数据集
user_log = pd.read_csv(data_path + 'data_format1/user_log_format1.csv')
user_info = pd.read_csv(data_path + 'data_format1/user_info_format1.csv')
train_data = pd.read_csv(data_path + 'data_format1/train_format1.csv')
test_data = pd.read_csv(data_path + 'data_format1/test_format1.csv')
sample_submission = pd.read_csv(data_path + 'sample_submission.csv')

3.3 数据压缩

def read_csv(file_name, num_rows):return pd.read_csv(file_name, nrows=num_rows)
# reduce memory
def reduce_mem_usage(df, verbose=True):start_mem = df.memory_usage().sum() / 1024**2numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']for col in df.columns:col_type = df[col].dtypesif col_type in numerics:c_min = df[col].min()c_max = df[col].max()if str(col_type)[:3] == 'int':if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:df[col] = df[col].astype(np.int8)elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:df[col] = df[col].astype(np.int16)elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:df[col] = df[col].astype(np.int32)elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:df[col] = df[col].astype(np.int64)else:if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:df[col] = df[col].astype(np.float16)elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:df[col] = df[col].astype(np.float32)else:df[col] = df[col].astype(np.float64)end_mem = df.memory_usage().sum() / 1024**2print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))return df
num_rows = None
num_rows = 200 * 10000 # 1000条测试代码使用
# num_rows = 1000train_file = data_path + 'data_format1/train_format1.csv'
test_file = data_path + 'data_format1/test_format1.csv'user_info_file = data_path + 'data_format1/user_info_format1.csv'
user_log_file = data_path + 'data_format1/user_log_format1.csv'train_data = reduce_mem_usage(read_csv(train_file, num_rows))
test_data = reduce_mem_usage(read_csv(test_file, num_rows))user_info = reduce_mem_usage(read_csv(user_info_file, num_rows))
user_log = reduce_mem_usage(read_csv(user_log_file, num_rows))
Memory usage after optimization is: 1.74 MB
Decreased by 70.8%
Memory usage after optimization is: 3.49 MB
Decreased by 41.7%
Memory usage after optimization is: 3.24 MB
Decreased by 66.7%
Memory usage after optimization is: 32.43 MB
Decreased by 69.6%

3.4 数据处理

del test_data['prob']
all_data = train_data.append(test_data)
all_data = all_data.merge(user_info,on=['user_id'],how='left')
del train_data, test_data, user_info
gc.collect()
"""
按时间排序
"""
user_log = user_log.sort_values(['user_id','time_stamp'])
"""
合并数据
"""
list_join_func = lambda x: " ".join([str(i) for i in x])agg_dict = {'item_id' : list_join_func,   'cat_id' : list_join_func,'seller_id' : list_join_func,'brand_id' : list_join_func,'time_stamp' : list_join_func,'action_type' : list_join_func}
rename_dict = {'item_id' : 'item_path','cat_id' : 'cat_path','seller_id' : 'seller_path','brand_id' : 'brand_path','time_stamp' : 'time_stamp_path','action_type' : 'action_type_path'}
user_log_path = user_log.groupby('user_id').agg(agg_dict).reset_index().rename(columns=rename_dict)

all_data_path = all_data.merge(user_log_path,on='user_id')

3.5 定义特征统计数据

3.5.1 定义统计函数

3.5.2 调用统计函数

3.6 提取统计特征

3.7 利用Countvector和TF-IDF提取特征

3.8 嵌入特征

3.9 Stacking分类特征

3.9.1 导包

from sklearn.model_selection import KFold
import pandas as pd
import numpy as np
from scipy import sparse
import xgboost
import lightgbm
from sklearn.ensemble import RandomForestClassifier,AdaBoostClassifier,GradientBoostingClassifier,ExtraTreesClassifier
from sklearn.ensemble import RandomForestRegressor,AdaBoostRegressor,GradientBoostingRegressor,ExtraTreesRegressor
from sklearn.linear_model import LinearRegression,LogisticRegression
from sklearn.svm import LinearSVC,SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import log_loss,mean_absolute_error,mean_squared_error
from sklearn.naive_bayes import MultinomialNB,GaussianNB

3.9.2 定义stacking分类特征函数

3.9.3 读取训练与验证数据

features_columns = [c for c in all_data_test.columns if c not in ['label', 'prob', 'seller_path', 'cat_path', 'brand_path', 'action_type_path', 'item_path', 'time_stamp_path']]
x_train = all_data_test[~all_data_test['label'].isna()][features_columns].values
y_train = all_data_test[~all_data_test['label'].isna()]['label'].values
x_valid = all_data_test[all_data_test['label'].isna()][features_columns].values

3.9.4 使用lgb和xgb分类模型构造stacking特征

天猫用户重复购买预测——特征工程相关推荐

  1. 天猫用户重复购买预测——数据探索

    天猫用户重复购买预测--数据探索 1. 理论 1.1 缺失数据处理 1.2 不均衡样本 1.2.1 随机欠采样 1.2.2 随机过采样 1.2.3 基于聚类的过采样方法 1.2.4 SMOTE算法 1 ...

  2. 天猫用户重复购买预测赛题——赛题理解 + 数据探索

    天猫用户重复购买预测赛题--赛题理解 + 数据探索 理论知识 1. 赛题信息 2. 评估指标 AUC 3. 查看数据样例 4. 缺失值查看 5. 查看数据分布 6. 探究影响复购的各种因素 理论知识 ...

  3. 天猫用户重复购买预测之特征工程

    特征工程 处理数据 # 全量信息处理,合并数据 all_data = train_data.append(test_data) all_data = all_data.merge(user_info, ...

  4. 阿里云天池大赛赛题(机器学习)——天猫用户重复购买预测(完整代码)

    目录 赛题背景 全代码 导入包 读取数据(训练数据前10000行,测试数据前100条) 读取全部数据 获取训练和测试数据 切分40%数据用于线下验证 交叉验证:评估估算器性能 F1验证 Shuffle ...

  5. 天猫用户重复购买预测之数据分析

    赛题理解 赛题链接 赛题背景: 商家有时会在特定日期,例如Boxing-day,黑色星期五或是双十一(11月11日)开展大型促销活动或者发放优惠券以吸引消费者,然而很多被吸引来的买家都是一次性消费者, ...

  6. 天池竞赛赛题-特征工程-天猫用户重复购买预测解析

    前言 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟! MATLAB-30天带你从入门到精通 MATLAB深入理解高级教程(附源码) tableau可视化数据 ...

  7. 【BI学习作业13-淘宝定向广告演化与天猫用户复购预测】

    目录 写在前面的话 1.思考题 1.1电商定向广告和搜索广告有怎样的区别,算法模型是否有差别 1.1.1电商定向广告 1.1.2搜索广告 1.2定向广告都有哪些常见的使用模型,包括Attention机 ...

  8. 天猫用户复购预测之特征工程构建1

    导入包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns fro ...

  9. 天池大赛——天猫用户复购预测

    从0开始学大数据分析与机器学习,简简单单写下竞赛心得.得分是0.623537,排名629/5602 一.赛题背景 商家有时会在特定的日期(如节礼日甩卖."黑色星期五 "或 &quo ...

最新文章

  1. 面试宝典:深入理解这110道python面试题,AI和大数据向你招手
  2. 【Part2】用JS写一个Blog (node + vue + mongoDB)
  3. MVC开发Markdown编辑器(1)
  4. cad字体安装_浩辰CAD与AutoCAD兼容性测评大起底!
  5. Thrown KeeperErrorCode = Unimplemented for /services exception
  6. 心路历程(五)-find work and find house
  7. python替换缺失值,处理空值+生成图形+图形标准化
  8. 2018最新麻瓜编程实用主义学Python课程
  9. 教你js生成二维码-QrCodeJS
  10. Codecademy-中文JavaScript系列教程-初认JS
  11. 夏天想美美的出门?店湾妹的“明星穿搭教科书”,很美有木有?
  12. Factory模式(工厂模式)
  13. 51单片机数码管计数器
  14. 【YOLOv5报错】AssertionError: Label class 4 exceeds nc=4 in /xxxxxx解决方法
  15. PMP-13项目相关方管理
  16. SSM疫情医院管理系统实训项目总结
  17. 【技术】uniapp之聊天室 demo
  18. django 使用系统自带登录装饰器login_required
  19. 2:为什么要读写分离
  20. 35K入职华为Java岗那天,我哭了:这5个月做的一切都值了

热门文章

  1. 总结python源文件编译、反编译、加密混淆
  2. 2021-04-24
  3. 【现代密码学原理】——传统加密技术(学习笔记)
  4. 文件夹里的文件怎么批量打印呢?
  5. 百度网盘安装在c盘显示系统权限限制的解决方法
  6. 通过CTFShow例题掌握爆破方法
  7. Windows下搭建ant+jenkins+jmeter自动化接口测试框架(详细篇)
  8. 基于Python的语音识别系统(孤立词)
  9. 分分钟拯救监控知识体系
  10. 上饶师范学院C语言试卷,13级普通科试卷A卷.doc