本文主要通过《生活大实惠:O2O优惠券使用预测》项目,完成用户是否会在规定时间内使用相应优惠券预测,从理论分析到实操,带大家熟悉下机器学习的整个流程。

生活大实惠:O2O优惠券使用预测

背景:随着移动设备的完善和普及,移动互联网+各行各业进入了高速发展阶段,这其中以O2O(Online to Offline)消费最为吸引眼球。据不完全统计,O2O行业估值上亿的创业公司至少有10家,也不乏百亿巨头的身影。O2O行业天然关联数亿消费者,各类APP每天记录了超过百亿条用户行为和位置记录,因而成为大数据科研和商业化运营的最佳结合点之一。 以优惠券盘活老用户或吸引新客户进店消费是O2O的一种重要营销方式。然而随机投放的优惠券对多数用户造成无意义的干扰。对商家而言,滥发的优惠券可能降低品牌声誉,同时难以估算营销成本。 个性化投放是提高优惠券核销率的重要技术,它可以让具有一定偏好的消费者得到真正的实惠,同时赋予商家更强的营销能力。

机器学习的基本步骤

完成项目预测主要分为如下6步,本文也将使用python按照这6步进行分析

  • 明确问题:明确问题属于分类还是回归
  • 理解数据:数据获取、数据导入、查看数据
  • 数据清洗:数据预处理、特征提取、特征选择
  • 构建模型:拆分训练集和数据集、算法选择
  • 模型评估:模型准确率、模型召回率、损失函数
  • 执行预测:预测结果

明确问题

从机器学习模型的角度来说,这是一个典型的分类问题,其过程就是根据已有训练集进行训练,得到的模型再对测试进行测试并分类。

理解数据

本项目总提供四个文件,分别是:

  • ccf_offline_stage1_test_revised.csv:线下测试集
  • ccf_offline_stage1_train.csv:线下训练集
  • ccf_online_stage1_train.csv:线上训练集
  • sample_submission.csv:预测结果提交格式

由于本文主要是完成整体流程搭建,涉及字段细节这里就不一一介绍

导入数据:

import numpy as np
import pandas as pd#通过pandas工具,导入csv数据
train_online = pd.read_csv(‘ccf_online_stage1_train.csv‘)
train_offline = pd.read_csv(‘ccf_offline_stage1_train.csv‘)
test = pd.read_csv(‘ccf_offline_stage1_test_revised.csv‘)#查看前5条数据
dfoff.head(5)

数据清洗

#定义折扣率计算方法
def convertRate(row):"""Convert discount to rate"""if row == 'null':return 1.0elif ':' in row:rows = row.split(':')return 1.0 - float(rows[1])/float(rows[0])else:return float(row)#定义标签列
def label(row):if row['Date_received'] == 'null':return -1if row['Date'] != 'null':td = pd.to_datetime(row['Date'], format='%Y%m%d') -pd.to_datetime(row['Date_received'], format='%Y%m%d')if td <= pd.Timedelta(15, 'D'):return 1return 0#定义数据处理方法,将折扣率及标签列添加到预测数据中
def processData(df):df['discount_rate'] = df['Discount_rate'].apply(convertRate)df['label'] = df['label'].apply(label)return df#执行调用
dfoff = processData(dfoff)

构建模型

# 拆分训练集和数据集
df = dfoff[dfoff['label'] != -1].copy()
train = df[(df['Date_received'] < '20160516')].copy()
valid = df[(df['Date_received'] >= '20160516') & (df['Date_received'] <= '20160615')].copy()# 模型特征获取
original_feature = ['discount_rate','discount_type','discount_man', 'discount_jian','distance', 'weekday', 'weekday_type']# 初始化SGDClassifier模型
model = SGDClassifier(#lambda:loss='log',penalty='elasticnet',fit_intercept=True,max_iter=100,shuffle=True,alpha = 0.01,l1_ratio = 0.01,n_jobs=1,class_weight=None
)# 数据填充
model.fit(train[original_feature], train['label'])

模型评估

# 预测以及结果评价
print(model.score(valid[original_feature], valid['label']))
# 0.909452622077# AUC,完美的AUC等于1,纯随机分类的AUC等于0.5
from sklearn.metrics imporrt oc_auc_sccore
roc_auc_score(y_train,score)# 存储模型
print("---save model---")
with open('1_model.pkl', 'wb') as f:pickle.dump(model, f)

执行预测

#加载模型
with open('1_model.pkl', 'rb') as f:model = pickle.load(f)#执行预测,获取预测结果
y_test_pred = model.predict_proba(dftest[original_feature])
dftest1 = dftest[['User_id','Coupon_id','Date_received']].copy()
dftest1['label'] = y_test_pred[:,1]#保存数据至CSV
dftest1.to_csv('submit1.csv', index=False, header=False)

小结

拿到计算后的csv,就可以去提交作业啦。

项目地址:https://tianchi.aliyun.com/competition/entrance/231593/information

机器学习实战---入门篇相关推荐

  1. Arduino 机器学习实战入门(上)

    Arduino 机器学习实战入门(上) 这是来自Arduino团队的Sandeep Mistry和Dominic Pajak的一篇客座文章. Arduino的任务是让机器学习变得简单,任何人都可以使用 ...

  2. 数据中台实战入门篇:数据中台对内、对外合作机制

    前言 之前文章讲了 <数据中台实战入门篇:双中台战略>,主要解决了什么是中台.什么是数据中台.业务中台.什么公司适合搭建双中台体系这几个问题.本篇文章讲一下数据中台的人员构成.内部如何合作 ...

  3. 高性能Redis实战 - 实战入门篇 - 基于 Redis 实现 Laravel 全站访问 PV 统计中间件功能

    1.应用场景 主要用于学习Redis缓存使用,以及如何基于Lavavel(中间件)现实全站PV统计, 触类旁通,其他框架或者功能实现是一样的道理,只是代码实现起来,会有差别- 2.学习/操作 1.文档 ...

  4. 用Python让单片机“行动”起来——MicroPython实战入门篇

    MicroPython以微控制器作为目标,从而使得Python可以用来控制硬件.说到MicroPython,也许有人会感到陌生.而说到和它密切相关的Python,是否会恍然大悟呢?Python属于解释 ...

  5. proteus仿真micropython_用Python让单片机“行动”起来——MicroPython实战入门篇

    MicroPython以微控制器作为目标,从而使得Python可以用来控制硬件.说到MicroPython,也许有人会感到陌生.而说到和它密切相关的Python,是否会恍然大悟呢?Python属于解释 ...

  6. 单片机python编程入门_用Python让单片机“行动”起来——MicroPython实战入门篇

    MicroPython以微控制器作为目标,从而使得Python可以用来控制硬件.说到MicroPython,也许有人会感到陌生.而说到和它密切相关的Python,是否会恍然大悟呢?Python属于解释 ...

  7. 微信小程序电商实战-入门篇

    IT实战联盟博客:http://blog.100boot.cn 小程序开发工具有新版本更新啦!开发体验更好了,详情可以查看微信公众平台-小程序https://mp.weixin.qq.com/debu ...

  8. 机器学习项目入门篇:一个完整的机器学习项目

    本部分,我们会作为被一家地产公司雇佣的数据科学家,完整地学习一个项目.下面是主要步骤: 项目概述. 获取数据. 发现并可视化数据,发现规律. 为机器学习算法准备数据. 选择模型,进行训练. 微调模型. ...

  9. matlab 职坐标,机器学习入门之机器学习实战ByMatlab(四)二分K-means算法

    本文主要向大家介绍了机器学习入门之机器学习实战ByMatlab(四)二分K-means算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助.前面我们在是实现K-means算法的时候,提到 ...

  10. Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM

    原 Python3<机器学习实战>学习笔记(八):支持向量机原理篇之手撕线性SVM 置顶 2017年09月23日 17:50:18 阅读数:12644 转载请注明作者和出处: https: ...

最新文章

  1. 机器学习——数据降维
  2. 求二叉树指定结点到根的路径c语言,二叉树根节点到叶子结点和为指定值的路径...
  3. CXF客户端配置请求超时限制
  4. Android Alarm自上而下 调试浅析
  5. html嵌入audio格式不支持,html5中audio支持音频格式的解决方法
  6. VCL组件之TStrings
  7. php 扫描仪对接,Mac_Mac怎么连接扫描仪?苹果电脑Mac添加扫描仪教程,  有很多的用户需要用到扫 - phpStudy...
  8. C++ 标准库——ctime
  9. LeetCode -- 推断链表中是否有环
  10. 人脸验证(三)--FaceNet
  11. 三菱服务器显示003C,FX3U/FX3G系列PLC内置定位功能的当前值寄存器是什么?
  12. 设备或电脑中如何查看自己所在的公网IP
  13. 华为防火墙做单臂路由_华为单臂路由配置详解
  14. 吾生有涯 而知也无涯
  15. 海尔全球十一连冠背后: 生态时代的无限游戏
  16. 你测试OK了吗——浅谈测试通过标准
  17. java抽象类实例化_抽象类能实例化吗
  18. visual studio2019安装opencv
  19. html浏览器在哪里,javascript在哪儿启用?
  20. 干货学起来!分享4个简单实用的Word技巧,请低调收藏!

热门文章

  1. AVOD-代码理解系列(二)
  2. 超级推荐!!值得收藏的黑客系列书:《黑客攻防实战xx》系列图书简介,一共4本
  3. 什么是PXE及PXE启动
  4. 用DialogBox生成的对话框一开始就隐藏起来
  5. mysql 数据库索引命名规范_MYSQL数据库命名及设计规范
  6. #游戏unity-VR场景漫游#shader之消除纹理重复感
  7. html5彩盒插件画廊,jQuery轻量级响应式LightBox图片画廊插件
  8. 扩展GridView控件(3) - 根据按钮的CommandName设置其客户端属性
  9. 86年版五笔和98年版五笔区别
  10. docker基础篇——万字解读小鲸鱼