【BI学习作业15-数据分析思维】
目录
- 1.思考题
- 1.1新零售中的“人、货、场”分别指的是什么?
- 1.2AIPL与传统的品牌资产评估有何区别?
- 1.2.1AIPL
- 1.2.2品牌评估
- 1.2.3方法总结
- 1.3请列举一例生活工作中存在的帕累托法则
- 1.4请简述GBDT与XGBoost的区别?
- 1.5如何处理神经网络中的过拟合问题?
- 1.5.1简化模型
- 1.5.2早停
- 1.5.3使用数据增强
- 1.5.4使用正则化
- 1.5.5使用丢弃法(Dropouts)
- 2.编程题
- 2.1智能供应链分析
- 2.1导入相关模块
- 2.2判断csv可以读取的格式
- 2.3编写可以减少运行内存的函数
- 2.4查看数据的相关信息
- 2.4.1查看前5行数据的信息
- 2.4.2查看数据集大小
- 2.4.3查看数据的统计信息
- 2.5缺失值判断
- 2.5.1缺失值处理
- 2.6数据的相关性
- 2.6.1Market聚合
- 2.6.2Category Name聚类
- 2.7完整代码
1.思考题
1.1新零售中的“人、货、场”分别指的是什么?
对的人:用户的画像(性别、年龄、人生阶段,兴趣爱好)
对的货:产品的定价、产品搭配(爆款产品、形象产品、搭配产品),仓储配送、供应链管理,分析产品数据(流量、点击、订单、入篮量)
对的场:渠道来源,页面分析,不同店面销售额,城市,商圈,地址
1.2AIPL与传统的品牌资产评估有何区别?
1.2.1AIPL
首次实现品牌人群资产定量化、链路化运营
“品牌人群资产”很重要,是大家都知道的。比如可口可乐的传奇总裁罗伯特伍德鲁夫说:即使可口可乐全部工厂都被大火烧掉,给我三个月时间,我就能重建完整的可口可乐。这位总裁为什么敢有如此豪言?最重要的是可口可乐品牌有强大的消费者人群资产,那些听过可口可乐的人、喝过的人、一年买很多次的人。
放在过去,“人群资产”是一个很难量化统计的概念。我们只能定性说可口可乐的人群资产一定比康师傅的多,但是具体有多少是不知道的。于是,阿里就推出了一个可以 把品牌在阿里系的人群资产定量化运营的模型,这也是支撑它全域营销概念落地的关键一环,这个模型叫做: A-I-P-L。
A(Awareness),品牌认知人群。包括被品牌广告触达和品类词搜索的人;
I(Interest),品牌兴趣人群。包括广告点击、浏览品牌/店铺主页、参与品牌互动、浏览产品详情页、品牌词搜索、领取试用、订阅/关注/入会、加购收藏的人;
P(Purchase),品牌购买人群,指购买过品牌商品的人;
L(Loyalty),品牌忠诚人群,包括复购、评论、分享的人。
在下面我们来看一个例子,我们**如何说可口可乐的人群资产比元气森林的多?**我们从上面分析的四个因素去逐个分析。
基于数据资产分析可以看出,品牌总资产约96万,其中认知群体总量81.5万占比约85%,虽然占比较高,但资产总量较小,品牌兴趣资产仅有7.7万,可挖掘潜力很小,品牌重点可侧重认知群体和兴趣群体的引入,扩大品牌AI群体资产;
基于数据资产分析可以看出,品牌四链路资产中女性群体占绝对主力,也符合品牌所属行业的特性;AI人群的男女比例与PL人群的男女比例无明显差异;
通过数据洞察可以看出,品牌AI人群月均消费能力低于PL人群的月均消费能力,表明品牌引入的低消费群体转化较差,以0-499区间为例,AI人群占比明显高于PL人群占占比,即引入的月消费能力在0-499的AI人群转化率较差,建议品牌引入AI人群时侧重月消费能力500以上的群体
通过数据洞察可以看出,AI人群与PL人群占比差异主要集中在18-24岁以及50周岁以上的群体,这两个年龄层的AI人群不易转化,基于数据洞察结果,后续进行AI人群引入时可压缩对50周岁以上群体的投入,加大对18-24岁群体的投入;
通过数据洞察可以看出,品牌四链路人群主要集中已婚已育、已婚未育两个阶段,PL人群挖掘和AI人群引入时可侧重已婚已育和已婚未育两个人生阶段的群体做重点挖掘,提升人群挖掘精准度;
1.2.2品牌评估
完整的品牌评估可以填补短期财务评估和长期策略分析之间的落差,取得一个平衡点。那么如何评估品牌呢?常用的品牌评估方法有会计法(成本法、市价法和收益法)和品牌资产评估法,分别介绍如下。
成本法对于一个品牌而言,其资产的成本占有不可替代的重要位置。因此,品牌评估应从品牌资产购置或开发的全部原始价值,以及品牌再开发成本与各项损耗价值两个方面来考虑。前一种方法叫原始成本法,后一种方法叫重置成本法。
市价法市价法是资产评估中最便捷的方法,如今也有人将其用于品牌评估中。它是按照同类品牌的价值进行评估。假设存在一个品牌交易市场,以若干个类似品牌作为参照,估算出品牌的价值。
收益法收益法又称收益现值法,是通过估算未来的预期收益(一般是“税后利润”指标),并采用适宜的贴现率折算成现值,然后累加求和,借以确定品牌价值的一种方法。其主要影响因素有:超额利润;②折现系数或本金化率;③收益期限。它是目前应用最广泛的方法,因为对于品牌所有者而言,未的获利能力才是真正的价值,因而试图计算成本品牌的未来收益或现金流量。对品牌未来收益的评估有两个相互独立的过程:一是分离出品牌的净收益,二是预测品牌的未来收益。
1.2.3方法总结
传统的品牌评估方法比较原始单一,只从单方面因素去思考,没有深入思考这背后的原因。而AIPL模型,每个维度都不同程度地分析相关因素,通过可视化图表,让人眼直观感受。
1.3请列举一例生活工作中存在的帕累托法则
80/20法则,是按事情的重要程度编排行事优先次序的准则是建立在“重要的少数与琐碎的多数”原理的基础上。这个原理是由十九世纪末期与二十世纪初期的意大利经济学家兼社会学家维弗利度·帕累托所提出的。它的大意是:在任何特定群体中,重要的因子通常只占少数,而不重要的因子则占多数,因此只要能控制具有重要性的少数因子即能控制全局。
巴雷特法则、80-20法则、帕累托效应、80/20原理、最省力法则、不平衡原则、帕累托法则、二八定律、重点法则。
帕雷托曾提出,在意大利80%的财富为20%的人所拥有,并且这种经济趋势存在普遍性。后来人们发现,在社会中有许多事情的发展,都迈向了这一轨道。目前,世界上有很多专家正在运用这一原理来研究、解释相关的课题。例如,这个原理经过多年的演化,已变成当今管理学界所熟知的“80/20原理”,即百分之八十的价值是来自百分之二十的因子,其余的百分之二十的价值则来自百分之八十的因子。
帕雷托法则又称80/20法则,是由意大利经济学家和社会学家帕雷托发现的,最初只限定于经济学领域,后来这一法则也被推广到社会生活的各个领域,且深为人们所认同。
帕累托法则是指在任何大系统中,约80%的结果是由该系统中约20%的变量产生的。例如,在企业中,通常80%的利润来自于20%的项目或重要客户;经济学家认为,20%的人掌握着80%的财富;心理学家认为,20%的人身上集中了80%的智慧等。
具体到时间管理领域是指大约20%的重要项目能带来整个工作成果的80%,并且在很多情况下,工作的头20%时间会带来所有效益的80%。
帕累托法则对我们的启示是:大智有所不虑,大巧有所不为。工作中应避免将时间花在琐碎的多数问题上,因为就算你花了80%的时间,你也只能取得20%的成效,出色地完成无关紧要的工作是最浪费时间的。你应该将时间花于重要的少数问题上,因为掌握了这些重要的少数问题,你只花20%的时间,即可取得80%的成效。工作中我们要学会“不钓小鱼钓鲸鱼”,如果你抓了100条小鱼,你所拥有的不过是满满一桶鱼,但如果你抓住了一条鲸鱼,你就不枉此行了。
80/20法则也被推广至社会生活的各个部分,且深为人们所认同。例如,在企业中,通常认为它80%的利润来自于20%的项目或重要客户;经济学家认为,20%的人掌握着80%的财富;心理学家认为,20%的人身上集中了80%的智慧;推而广之,我们可以认为,在任何大系统中,约80%的结果是由该系统中约20%的变量产生的。“80/20”原理对所有人的一个重要启示便是:避免将时间花在琐碎的多数问题上,因为就算你花了80%的时间,你也只能取得20%的成效:你应该将时间花于重要的少数问题上,因为掌握了这些重要的少数问题,你只花20%的时间,即可取得80%的成效。
- 学习和培训
一定要花80%的时间和精力去参加学习和培训,真正走向推销的时候,你就可以用20%的时间和精力去学习新东西。 - 推销时间
80%的时间是工作,20%的时间是休息。 - 对目标客户的理解
了解80%,只消花20%努力,成功的把握就可以达到80%。如果你对推销对象一无所知,即使极尽80%之努力,也只有20%的成功希望。 - 推销的市场
真正能够接受你的推销的客户只有20%,但这些人却会影响其他80%的客户。你要花80%的精力找到这20%的客户。80%的业绩,来自20%的老客户。 - 听与说
使用80%的耳朵去倾听。如果80%的时间你都在唠叨不停,推销成功的希望将降到20%。仅用20%的嘴巴去说服客户。 - 第一印象
第一印象80%来自仪表。在客户面前一定要花80%的努力去微笑,它胜过用80%的言辞所建立起的形象所以花20%的时间,修饰一番再出门是必要的。如果客户认为你是严肃而不易接近的,你成功的可能性将降为20%。 情感与介绍80%来自交流、建立感情的成功。如果你用80%的精力使自己接近客户,设法向他表示友好,你只消花20%的时间去介绍产品,就有八成的希望成功20%来自演示、介绍产品的成功。假如你只用20%的努力去与客户谈交情,即使你用80%的努力去介绍产品,八成是白费劲。 - 成功与失败
在推销实践中,80%的将是失败,80%的人会因四处碰壁知难而退。80%的成功要归因于个人素质和技巧。但80%的推销员不是努力提高自己的水平,而是在抱怨和等待。 在成功的原因中,只有20%是由于环境和运气。仅20%的人会成功,这20%的人,将为他们的企业带来80%的利益。 - 讨价还价
80%的客户都会说你推销的产品价格高。但你大可不必花80%的口舌去讨价还价,一定要花80%的力量证明它能够给客户带来多大的好处,这至关重要你只消用20%的力量去证明你的东西为什么价格高就足矣销售员可以选择:或是期待一个微小的运气,期待你的救星而赌光自己的生命;或是通过自我完善来增加自己的机遇。推销员可以一成不变,然后失败;也可以忍受成长的痛苦,进而成功。对此,一个成功的推销员应该作出明智的选择。
推销,首先要从自我推销开始。如果你能把以上要求当做法则自觉执行,成功的希望一定在80%以上,失败的可能也一定会降到20%以下。
帕累拖原理是指世界上充满了不平衡性,比如20%的人口拥有80%的财富,20%的员工创造了80%的价值,80%的收入来自20%的商品,80%的利润来自20%的顾客,等等。这种不平衡关系也可以称为二八法则。该法则认为,资源总会自我调整,以求将工作量减到最少。抓好起主要作用的20%的问题,其他80%的问题就迎刃而解了。所以,在工作中要学会抓住关键的少数,要用20%的精力付出获取80%的回报。因此,这种法则又叫省力法则。
企业管理
运用二八法则管理企业,就必须先弄清楚公司在哪些方面是赢利的,哪些方面是亏损的。理出赢利的部分,从而制定出一套有利于公司成长的策略。其次要搞清楚什么部门业绩平平,什么部门创造了较高利润,什么部门带来严重赤字,通过比较分析就会发现起主要作用的因素。获利的项目是少数,要给予更多的关注。人力资源管理
二八法则同样适用于人力资源管理。一个组织的的生产效率和未来发展往往取决于少数关键性的人物,这些人可以帮助企业获取大部分的利润。多数人为企业的发展作出了贡献,他们看起来非常忙碌,但并没有为公司的发展创造什么价值。找到关键性的少数人,要建立有效的收益分配机制,防止关键人员流失。要理清20%的骨干力量、20%的重点产品、20%的重点客户、20%的重点信息以及20%的重点项目到底是哪些?然后将精力集中到这20%上,采取有效的跟进措施。人际关系处理
在认识的人当中,有一多半是泛泛之交。一小部分的人际关系等于大部分的情感价值,数量少但程度深厚的人际关系好过广泛而浮浅的交际。所以,要把80%左右的时间花在20%的重要人物的人际关系处理上。人生规划
人的专长可能很多,但真正发挥作用的很少。所以,要善于掌握自己的优势,寻找那些自己非常喜欢、非常擅长、竞争不太激烈的事情去做,一定会有收获。找到人生最关键的事情,才有可能获得成功的人生。在安排自己的时间上,有所不为才能有所为。要集中自己的时间精力,抓关键的人、关键的环节、关键的岗位和关键的项目。
1.4请简述GBDT与XGBoost的区别?
不同1:GBDT 是机器学习算法,XGBoost 是算法的工程实现。
不同2:XGBoost加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力
不同3:GBDT 在模型训练时只使用了代价函数的一阶导数信息,XGBoost 对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数
不同4:传统 GBDT 在每轮迭代时使用全部的数据,XGBoost 则采用了与随机森林相似的策略,支持对数据进行采样
不同5:传统的 GBDT 没有设计对缺失值进行处理,XGBoost 能够自动学习出缺失值的处理策略
1.5如何处理神经网络中的过拟合问题?
当模型试着预测噪声较多的数据的趋势时,由于模型参数过多、过于复杂,就会导致过拟合。过拟合的模型通常是不精确的,因为这样的预测趋势并不会反映数据的真实情况。我们可以通过模型在已知的数据(训练集)中有好的预测结果,但在未知的数据(测试集)中较差的表现来判断是否存在过拟合。机器学习模型的目的是从训练集到该问题领域的任何数据集上均有泛化的较好表现,因为我们希望模型能够预测未知的数据。
1.5.1简化模型
处理过拟合的第一步就是降低模型复杂度。为了降低复杂度,我们可以简单地移除层或者减少神经元的数量使得网络规模变小。与此同时,计算神经网络中不同层的输入和输出维度也十分重要。虽然移除层的数量或神经网络的规模并无通用的规定,但如果你的神经网络发生了过拟合,就尝试缩小它的规模。
1.5.2早停
在使用迭代的方法(例如梯度下降)来训练模型时,早停是一种正则化的形式。因为所有的神经网络都是通过梯度下降的方法来学习的,所以早停是一种适用于所有问题的通用技术。使用这种方法来更新模型以便其在每次迭代时能更好地适应训练集。在一定程度上,这种方法可以改善模型在测试集上的表现。但是除此之外,改善模型对训练集的拟合会增加泛化误差。早停规则指定了模型在过拟合之前可以迭代的次数。
1.5.3使用数据增强
1.5.4使用正则化
正则化是一种降低模型复杂度的方式。它是通过在损失函数中添加一个惩罚项来实现正则化。最常见的技术是L1和L2正则化。
1.5.5使用丢弃法(Dropouts)
丢弃法是一种避免神经网络过拟合的正则化技术。像L1和L2这样的正则化技术通过修改代价函数来减少过拟合。而丢弃法修改神经网络本身。它在训练的每一次迭代过程中随机地丢弃神经网络中的神经元。当我们丢弃不同神经元集合的时候,就等同于训练不同的神经网络。不同的神经网络会以不同的方式发生过拟合,所以丢弃的净效应将会减少过拟合的发生。
2.编程题
2.1智能供应链分析
数据集下载链接:https://pan.baidu.com/s/1hj9JjIWCmgQuke75ooNWjw
提取码:andm
数据集:SupplyChainDataset.csv,供应链采购数据
目标:
- 供应链数据探索
- 对用户进行分层运营
- 对于欺诈订单进行预测,即Order Status=‘SUSPECTED_FRAUD’
- 对于迟交货订单进行预测,即Delivery Status= ‘Late delivery’
- 对于销售额进行预测,即Sales字段
- 对于订货数量进行预测,即Order Item Quantity
2.1导入相关模块
import numpy as np
import pandas as pd
import seaborn as snspd.set_option('display.max_columns',None)
2.2判断csv可以读取的格式
for i in ('gbk','utf-8','gb18030','ansi'): try:data = pd.read_csv('SupplyChain.csv',encoding = i)print(i + 'decode success')except:print(i + 'decode fail')
2.3编写可以减少运行内存的函数
def reduce_mem_usage(df, verbose=True):numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']start_mem = df.memory_usage().sum() / 1024**2 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**2if verbose: print('Mem. usage decreased to {:5.2f} Mb ({:.1f}% reduction)'.format(end_mem, 100 * (start_mem - end_mem) / start_mem))return dfdf = pd.read_csv('SupplyChain.csv',encoding='unicode_escape')
df = reduce_mem_usage(df)
2.4查看数据的相关信息
2.4.1查看前5行数据的信息
df.head()
2.4.2查看数据集大小
print("数据集的形状为:{}".format(df.shape))
2.4.3查看数据的统计信息
df.describe()
df.corr()
2.5缺失值判断
df.isnull().sum()
我们可以看到:Customer Lname、Customer Zipcode、Order State、Order Status、Order Zipcode、Product Card Id、Product Category Id、Product Description、shipping date (DateOrders)、Shipping Mode都含有缺失值
2.5.1缺失值处理
# 将fistname与lastname进行合并
df['Customer Full Name'] = df['Customer Fname'] +df['Customer Lname']
#dataset.head()
df['Customer Zipcode'].value_counts()# 查看缺失值,发现有3个缺失值
df['Customer Zipcode'].isnull().sum()# 用众数填充缺失值
df['Customer Zipcode'].fillna(df['Customer Zipcode'].mode()[0],inplace=True)
2.6数据的相关性
# 特征字段之间相关性 热力图
data = df
plt.figure(figsize=(20,10))
# annot=True 显示具体数字
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
# 结论:可以观察到Product Price和Sales,Order Item Total有很高的相关性
2.6.1Market聚合
# 基于Market进行聚合
market = data.groupby('Market')
# 基于Region进行聚合
region = data.groupby('Order Region')
plt.figure(1)
market['Sales per customer'].sum().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Sales in different markets')
plt.figure(2)
region['Sales per customer'].sum().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Sales in different regions')
plt.show()
2.6.2Category Name聚类
# 基于Category Name进行聚类
cat = data.groupby('Category Name')
plt.figure(1)
# 不同类别的 总销售额
cat['Sales per customer'].sum().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Total sales')
plt.figure(2)
# 不同类别的 平均销售额
cat['Sales per customer'].mean().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Total sales')
plt.show()
2.7完整代码
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as pltpd.set_option('display.max_columns',None)# 数据加载
dataset = pd.read_csv('SupplyChain.csv', encoding='unicode_escape')print(dataset.shape)
print(dataset.isnull().sum())print(dataset[['Customer Fname', 'Customer Lname']])
# fistname与lastname进行合并
dataset['Customer Full Name'] = dataset['Customer Fname'] +dataset['Customer Lname']
#dataset.head()
dataset['Customer Zipcode'].value_counts()
# 查看缺失值,发现有3个缺失值
print(dataset['Customer Zipcode'].isnull().sum())dataset['Customer Zipcode'] = dataset['Customer Zipcode'].fillna(0)
dataset.head()# 特征字段之间相关性 热力图
data = dataset
plt.figure(figsize=(20,10))
# annot=True 显示具体数字
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
# 结论:可以观察到Product Price和Sales,Order Item Total有很高的相关性# 基于Market进行聚合
market = data.groupby('Market')
# 基于Region进行聚合
region = data.groupby('Order Region')
plt.figure(1)
market['Sales per customer'].sum().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Sales in different markets')
plt.figure(2)
region['Sales per customer'].sum().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Sales in different regions')
plt.show()# 基于Category Name进行聚类
cat = data.groupby('Category Name')
plt.figure(1)
# 不同类别的 总销售额
cat['Sales per customer'].sum().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Total sales')
plt.figure(2)
# 不同类别的 平均销售额
cat['Sales per customer'].mean().sort_values(ascending=False).plot.bar(figsize=(12,6), title='Total sales')
plt.show()# 创建时间戳索引
temp = pd.DatetimeIndex(data['order date (DateOrders)'])# 取order date (DateOrders)字段中的year, month, weekday, hour, month_year
data['order_year'] = temp.year
data['order_month'] = temp.month
data['order_week_day'] = temp.weekday
data['order_hour'] = temp.hour
data['order_month_year'] = temp.to_period('M')
data.head()# 对销售额进行探索,按照不同时间维度 年,星期,小时,月
plt.figure(figsize=(10, 12))
plt.subplot(4, 2, 1)
df_year = data.groupby('order_year')
df_year['Sales'].mean().plot(figsize=(12, 12), title='Average sales in years')
plt.subplot(4, 2, 2)
df_day = data.groupby('order_week_day')
df_day['Sales'].mean().plot(figsize=(12, 12), title='Average sales in days per week')
plt.subplot(4, 2, 3)
df_hour = data.groupby('order_hour')
df_hour['Sales'].mean().plot(figsize=(12, 12), title='Average sales in hours per day')
plt.subplot(4, 2, 4)
df_month = data.groupby('order_month')
df_month['Sales'].mean().plot(figsize=(12, 12), title='Average sales in month per year')
plt.tight_layout()
plt.show()# # 用户分层 RFM
data['TotalPrice'] = data['Order Item Quantity'] * data['Order Item Total']
data[['TotalPrice', 'Order Item Quantity', 'Order Item Total']]# 时间类型转换
data['order date (DateOrders)'] = pd.to_datetime(data['order date (DateOrders)'])
# 统计最后一笔订单的时间
data['order date (DateOrders)'].max()# 假设我们现在是2018-2-1
import datetime
present = datetime.datetime(2018,2,1)
# 计算每个用户的RFM指标
# 按照Order Customer Id进行聚合,
customer_seg = data.groupby('Order Customer Id').agg({'order date (DateOrders)': lambda x: (present-x.max()).days, 'Order Id': lambda x:len(x), 'TotalPrice': lambda x: x.sum()})
customer_seg# 将字段名称给成 R,F,M
customer_seg.rename(columns={'order date (DateOrders)': 'R_Value', 'Order Id': 'F_Value', 'TotalPrice': 'M_Value'}, inplace=True)
customer_seg.head()# 将RFM数据划分为4个尺度
quantiles = customer_seg.quantile(q=[0.25, 0.5, 0.75])
quantiles = quantiles.to_dict()# R_Value越小越好 => R_Score就越大
def R_Score(a, b, c):if a <= c[b][0.25]:return 4elif a <= c[b][0.50]:return 3elif a <= c[b][0.75]:return 2else:return 1# F_Value, M_Value越大越好
def FM_Score(a, b, c):if a <= c[b][0.25]:return 1elif a <= c[b][0.50]:return 2elif a <= c[b][0.75]:return 3else:return 4# 新建R_Score字段,用于将R_Value => [1,4]
customer_seg['R_Score'] = customer_seg['R_Value'].apply(R_Score, args=("R_Value", quantiles))
# 新建F_Score字段,用于将F_Value => [1,4]
customer_seg['F_Score'] = customer_seg['F_Value'].apply(FM_Score, args=("F_Value", quantiles))
# 新建M_Score字段,用于将R_Value => [1,4]
customer_seg['M_Score'] = customer_seg['M_Value'].apply(FM_Score, args=("M_Value", quantiles))
customer_seg.head()# 计算RFM用户分层
def RFM_User(df):if df['M_Score'] > 2 and df['F_Score'] > 2 and df['R_Score'] > 2:return '重要价值用户'if df['M_Score'] > 2 and df['F_Score'] <= 2 and df['R_Score'] > 2:return '重要发展用户'if df['M_Score'] > 2 and df['F_Score'] > 2 and df['R_Score'] <= 2:return '重要保持用户'if df['M_Score'] > 2 and df['F_Score'] <= 2 and df['R_Score'] <= 2:return '重要挽留用户'if df['M_Score'] <= 2 and df['F_Score'] > 2 and df['R_Score'] > 2:return '一般价值用户'if df['M_Score'] <= 2 and df['F_Score'] <= 2 and df['R_Score'] > 2:return '一般发展用户'if df['M_Score'] <= 2 and df['F_Score'] > 2 and df['R_Score'] <= 2:return '一般保持用户'if df['M_Score'] <= 2 and df['F_Score'] <= 2 and df['R_Score'] <= 2:return '一般挽留用户'
【BI学习作业15-数据分析思维】相关推荐
- 【BI学习作业17-智能供应链与评分卡模型】
目录 1.编程题 1.1二手车价格预测 1.2供应链分析 1.编程题 1.1二手车价格预测 数据地址:数据集地址:https://pan.baidu.com/s/1TMyk9A2ggDOraP2mMw ...
- 【BI学习作业13-淘宝定向广告演化与天猫用户复购预测】
目录 写在前面的话 1.思考题 1.1电商定向广告和搜索广告有怎样的区别,算法模型是否有差别 1.1.1电商定向广告 1.1.2搜索广告 1.2定向广告都有哪些常见的使用模型,包括Attention机 ...
- 【BI学习作业18-评分卡模型】
目录 1.思考题 1.1都有哪些模型具有特征可解释性? 1.1.1可解释性的重要性 1.1.2解释方法分类 1.1.3解释范围 1.1.3.1算法透明度 1.1.3.2全局整体模型的可解释性 1.1. ...
- 【BI学习作业10-时间序列实战】
内容目录 1.编程题 1.1交通流量预测 1.2资金流入流出预测 1.2.1数据集信息 1.2.2数据探索 1.编程题 1.1交通流量预测 题目名称:JetRail高铁的乘客数量预测 数据集:jetr ...
- 【BI学习作业11-资金流入流出预测】
内容目录 1.编程题 1.1资金流入流出预测 1.1.1数据集信息 1.1.2数据探索 1.2新闻内容自动提取及呈现 1.编程题 1.1资金流入流出预测 数据集地址:https://tianchi.a ...
- 打假!伪数据分析思维大曝光
近两年来,数字化.数据分析.大数据等概念火了,引来一帮牛鬼蛇神,把各种各样乌七八糟的东西都包装成"大数据思维"兜售.总结一下,一共八大门派,各个身怀绝技.在工作中遇到了,绝对让人苦 ...
- 【BI学习心得15-数据分析思维】
目录 1.数据分析 2.数据分析的问题解决 2.1在做数据分析之前,我们需要思考什么? 2.2明确大目标后(比如提升用户购买转化)该如何工作呢? 2.3提一个好的问题,帮你明确目标是什么? 2.4了解 ...
- 学习《数据分析思维课》后总结梳理
学前思考 学前,我想通过这个专栏学到什么? 平时的工作主要是平台开发,产品规划.之外是技术学习,了解一些新技术:研究产品使用过程中产生的问题,进行分析改进.这个专栏不是很专业的基础课,主要是结合场景的 ...
- 数据分析思维学习1:业务指标、数据获取、数据仓库、数据治理、数据分析方法
数据分析入门实战 最近上了一个关于数据分析思维的网课,内容比较偏业务上的实际应用,关注点更多在于数据思维.以下是我在学习过程中的笔记整理. 文章目录 数据分析入门实战 第一章数据分析与数据分析师 数据 ...
最新文章
- 混合云扛起云存储领军大旗
- 在一个JSP页面中包含另一个JSP页面的三种方式
- Linux系统怎么挂载安卓手机,NFS挂载Android文件系统
- 退出循环:break 跳过当前的这次循环,直接开始下一次循环:continue
- 【推荐一位Python大佬】 从程序员到创业者,再到自由职业
- 广西大学计算机类开设课程,操作系统教学大纲-广西大学计算机与电子信息学院.DOC...
- 《看聊天记录都学不会C语言?太菜了吧》(10)程序媛聪明绝顶了
- c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十三 | 利用多尺度融合提升图像细节...
- 架构设计--逻辑层 vs 物理层
- 2-10 TreeView 控件
- css div 绝对定位到底部不居中问题
- MyBatis使用Map
- 基于STC89C52的小车制作上篇,用电机将小车驱动起来之对L298N逻辑输入N1~N4详解
- esp_wifi_repeater, 全功能WiFi中继器
- 联手华为,北京联通在北京打造不一样的5G慧生活!
- 机器学习:朴素贝叶斯算法对新闻分类
- 好听的摇滚_好听的摇滚歌曲大全
- 全年腾飞计划笔记(腾飞笔记)
- Pixhawk指示灯和蜂鸣器含义
- 个人物联网(目前用到了树莓派、PMS7003攀藤g7传感器、DHT11温湿度传感器)