背景:

运营部要对沉默用户进行电话召回,为了探索更高效的召回方式,分别进行了下述两种测试:

1、人工拨打电话

2、AI外呼平台拨打电话

(因方式2需要提前设定机器人的话术,本次测试中设定了两套销售话术,"话术A"和"话术B")

因此,我们要将用户名单分为三组,即:

1、人工组

2、AI话术A组

3、AI话术B组

分别对三组用户进行电话拨打,并在测试后考核接听率和成交率。

问题:

运营同事按时间范围圈选了一部分用户名单,发现名单中的用户在沉默之前分别来自于不同的流量渠道并且有些用户有参加过我们的某个活动,这两个属性("渠道属性"、"是否参与过活动")对本次测试的接听率和成交率都会产生较大的影响。

所以本次需要我们数据组解决的问题是:在考虑用户属性相同的前提下,如何均匀的切分成三个样本?(即,保证三个样本内的用户属性基本一致)

解决:

要解决上述问题,最简单的办法就是随机分组:

即,每个用户被等概率的随机分配到三个实验组当中。

这里我们可以使用机器学习模块中的拆分训练集和测试集的方法:

即,sklearn.model_selection 中的 train_test_split

在python中使用:

from sklearn.model_selection import train_test_split

分别设定训练集和测试集的切分比例进行切分,

train_date, test_date = train_test_split(df_date, train_size=0.5, test_size=0.5, random_state=123)

train_date:我们希望得到的训练集样本

test_date:我们希望得到的测试集样本

df_date:总样本

train_size、test_size:训练集/测试集切分比例

random_state:随机种子(设置某个数字,可保证随机种子相同时我们每次随机切分的结果也相同)

这样可以切成两份,那么三份如何切?

答案很简单,我们只需要对训练集或测试集再切分一次,就是三份了。

具体实现:

满足运营同事的三个小需求:

1、首先观察圈选总样本的用户属性构成是否满足我们的测试需要

2、将圈选总样本切成3份用户属性一样的测试样本

3、对比切分后3个样本的用户属性构成是否一致

样本:

运营同事圈选的总样本

代码:

导入模块/读取数据:

import pandas as pd
from sklearn.model_selection import train_test_splitdf = pd.read_excel('圈选总样本.xlsx')

需求1代码:

按维度(一维或多维)分组对某列聚合后查看其非空数量的占比;并可重复查看

例如:以是否参加过活动为分组聚合,查看是否参加过活动的用户占比

def analysis(df):print(df.info())y = input('是否查看样本特征占比(y-查看,n-不查看):  ')if y == 'y':while True:re_check = 1while re_check == 1:group_columns = input('输入分组列名(若多维分组则用逗号间隔输入列名):').split(',')target_columns = input('输入聚合列名(若多个则用逗号间隔): ').split(',')for column in group_columns+target_columns:if column not in list(df):print('列名输入错误:{}'.format(column))re_check = 1breakelse:re_check = 0grouped = df.groupby(by=group_columns).count()rate_columns = []for target_column in target_columns:rate_name = 'rate_'+target_columnrate_columns.append(rate_name)col_sum = grouped[target_column].sum()grouped[rate_name] = grouped.apply(lambda x: str(round((x[target_column]/col_sum)*100, 2))+'%', axis=1)print(grouped[target_columns+rate_columns])check_again = input('是否继续查看其他(y-查看,n-不查看): ')if check_again == 'y':continueelse:breakelse:pass

假如,我们要查看总样本的渠道构成,那么输入和输出:

需求2:设定比例均匀切分样本

def sample_cut(df):sample = dfwhile True:n = input('输入切分样本比例(逗号间隔,例如:0.2,0.3,0.5):  ')sizelist = list(map(float, n.split(',')))if sum(sizelist) != 1:print('样本切分比例之和不为1')else:breakcut_result = []for i in range(len(sizelist)-1):cut_size = sizelist[i]/sum(sizelist[i:len(sizelist)])cut_sample, sample = train_test_split(sample, train_size=cut_size, test_size=1.0-cut_size, random_state=123)cut_sample.to_excel('样本'+str(i+1)+'切分比例'+str(sizelist[i])+'数量'+str(cut_sample.shape[0])+'.xlsx', index=False)print('样本'+str(i+1)+' 切分比例:' + str(sizelist[i]) + '  数量:' + str(cut_sample.shape[0]))cut_result.append(cut_sample)sample.to_excel('样本'+str(len(sizelist))+'切分比例'+str(sizelist[-1])+'数量'+str(sample.shape[0])+'.xlsx', index=False)print('样本'+str(len(sizelist))+' 切分比例:' + str(sizelist[-1]) + '  数量:' + str(sample.shape[0]))cut_result.append(sample)return cut_result

假如我要切三份:可以输入 0.3,0.3,0.4  (注意比例之和为1)

需求3:对比验证切分后的样本是否均匀

def comparison(cut_result):while True:re_check = 1while re_check == 1:comp_cols = input('输入待对比的分组列名及聚合列名,逗号间隔(例如:is_attend,user_id): ').split(',')for comp_col in comp_cols:if comp_col not in list(cut_result[0]):print('列名输入错误:{}'.format(comp_col))re_check = 1breakelse:re_check = 0comp_dfs = []rate_columns = []for i in range(len(cut_result)):grouped = cut_result[i].groupby(by=[comp_cols[0]]).count()target_sum = grouped[comp_cols[1]].sum()rate_colname = 'rate_样本'+str(i+1)rate_columns.append(rate_colname)grouped[rate_colname] = grouped.apply(lambda x: str(round(x[comp_cols[1]]/target_sum*100, 2))+'%', axis=1)comp_dfs.append(grouped)num = 0for com_df in comp_dfs:if num == 0:df_temp = com_dfnum = 1else:df_temp = pd.merge(df_temp, com_df, how='left', on=comp_cols[0])print(df_temp[rate_columns])re = input('是否继续查看(y-继续,n-结束): ')if re != 'y':breakelse:continue

假如,验证渠道属性是否均匀

输入格式:"分组列名,聚合列名"

执行

#待切分样本文件路径
df = pd.read_excel('圈选总样本.xlsx')
#查看待切分样本特征占比
analysis(df)
#按设定比例随机切分成多份样本
cut_result = sample_cut(df)
#对比切分后样本特征占比
comparison(cut_result)

样本切分器—利用python按比例均匀切分样本相关推荐

  1. python利用特征进行可视化样本显示_利用Python进行机器学习之特征选择

    毫无疑问,解决一个问题最重要的是恰当选取特征.甚至创造特征的能力,这叫做特征选取和特征工程.对于特征选取工作,我个人认为分为两个方面: 1)利用python中已有的算法进行特征选取. 2)人为分析各个 ...

  2. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

  3. 利用python实现深度学习生成对抗样本模型,为任一图片加扰动并恢复原像素的全流程记录

    利用python实现深度学习生成对抗样本,为任一图片加扰动并恢复原像素 一.前言 (一)什么是深度学习 (二)什么是样本模型 (三)什么是对抗样本 1.对抗的目的 2.谁来对抗? 3.对抗的敌人是谁? ...

  4. 小哥哥你有98K吗?利用Python制作一款多功能变声器!

    前言 好吧,关于这句小哥哥你有98K吗?出自别人口中经常说的玩笑话,我也略懂一些游戏嘛.不过不常玩,废话不多说,开始咱们今天的教程,非常简单! 利用Python制作一款多功能变声器! 咱们首先登陆百度 ...

  5. python sklearn的训练集测试集根据标签的比例来切分数据集

    在切分数据集的时候发现标签样本非常不均衡的情况, 这时候切分数据比为了避免没有均衡切分每一种分类就可以用sklearn来实现 train_x,test_x,train_y,test_y = train ...

  6. python爬虫能爬取微信密码吗_如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例...

    今天我们继续focus on微信,不过这次给大家带来的是利用Python网络爬虫抓取微信好友总数量和微信好友男女性别的分布情况.代码实现蛮简单的,具体的教程如下. 相信大家都知道,直接通过网页抓取微信 ...

  7. python实现app自动签到器_利用Python实现App自动签到领取积分

    要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化.但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了. 有需要Python学习资料的小伙伴吗?小编整理[ ...

  8. Machine learning(ML)常用的几类学习器及Python实现

    Machine learning(ML)常用的几种学习器及Python实现 一.决策树 1.函数的参数主要为: 2. 决策树的保存 二.Boostings 1.Adaboost 1.构建训练函数 2. ...

  9. logistic回归 如何_第七章:利用Python实现Logistic回归分类模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

最新文章

  1. 【干货】产品经理常忽略的用户研究的四大误区
  2. WordPress get_allowed_mime_types函数(wp-includes/functions.php)存在跨站脚本漏洞
  3. 切割照片php上传,php下ajax的文件切割上传
  4. 外部表在Hive中的使用
  5. linux目标机无法连接到网络,linux 安装了xunsearch服务,但是PHP连接显示:目标计算机积极拒绝...
  6. 用递归的方式处理数组 把递归方法方法定义到数组的原型上 (这是一次脑洞大开的神奇尝试)...
  7. unity2018关联不到vs_vs2015与unity2018兼容性问题
  8. R语言绘图及检验——正态分布曲线
  9. entity framework 新手入门篇(1)-建立模型
  10. pl330 dmac驱动分析1--数据结构
  11. 微服务之springCloud-docker-comsumer(三)
  12. 核磁共振三维重建(视频)
  13. 我手机上常用的app和常访问的网站
  14. 模型量化 pytorch2onnx
  15. React源码解毒 - render方法解析
  16. 高通thermal-engine配置文件格式详解
  17. 电视如何启动微型计算机,装了机顶盒之后,电视一开机如何直接默认进入数字电视方式...
  18. 多个DataFream追加写入同一个sheet代码示例
  19. 下载Docker Compose超时的问题(Fail connect to github-production-release-asset-2e65be.s3.amazonaws.com:443)
  20. 华为笔试题 linux c,华为C/C++笔试题 2

热门文章

  1. yii之gii的使用
  2. php如何配置gii,Yii2之gii的配置与使用
  3. php网站的难点,PHP开发有哪些难点
  4. 由浅入深配置webpack4
  5. java学习总结(16.07.16)Random类和BigDecimal类
  6. ideal拉代码和提交代码
  7. python批量下载txt图片批量导入到ppt
  8. 包无法进行更新、相关性或冲突验证。 (Exception from HRESULT: 0x80073CF3)的解决办法
  9. 内存颗粒性能测试软件,内存性能测试及编辑总结
  10. ps怎么将图片制作成ico图标? ps制作ico图标的教程