机器学习多场景实战

机器学习已不再局限于理论探讨,而是广泛渗透到我们生活的方方面面,成为解决复杂问题、优化决策过程的强有力工具。从智能推荐系统个性化推送你可能喜爱的电影和商品,到金融风控领域精准识别欺诈交易;每一个应用场景都是机器学习技术多维度、深层次实战的精彩演绎,我们通过一些小案例对业务进行了解~

什么是数据指标💥
  • 数据指标概念:可将某个事件量化,且可形成数字,来衡量目标。

  • 数据指标的作用:当我们确定下来一套指标,就可以用指标来衡量业务,判断业务好坏

常用的业务指标💥

活跃用户指标💥 

一个产品是否成功,如果只看一个指标,那么这个指标一定是活跃用户数

  • 日活(DAU):一天内日均活跃设备数

  • 月活(MAU):一个月内的活跃设备数

  • 周活跃数(WAU):一周内活跃设备数

  • 活跃度(DAU/MAU):体现用户的总体粘度,衡量期间内每日活跃用户的交叉重合情况

新增用户指标💥

主要是衡量营销推广渠道效果的最基础指标

  • 日新增注册用户量:统计一天内,即指安装应用后,注册APP的用户数。

  • 周新增注册用户量:统计一周内,即指安装应用后,注册APP的用户数。

  • 月新增注册用户量:统计一月内,即指安装应用后,注册APP的用户数。

  • 注册转化率:从点击广告/下载应用到注册用户的转化。

  • DNU占比:新增用户占活跃用户的比例,可以用来衡量产品健康度

    • 新用户占比活跃用户过高,那说明该APP的活跃是靠推广得来

留存指标💥

是验证APP对用户吸引力的重要指标。通常可以利用用户留存率与竞品进行对比,衡量APP对用户的吸引力

  • 次日留存率:某一统计时段新增用户在第二天再次启动应用的比例

  • 7日留存率:某一统计时段新增用户数在第7天再次启动该应用的比例,14日和30日留存率以此类推

行为指标💥

  • PV(访问次数,Page View):一定时间内某个页面的浏览次数,用户每打开一个网页可以看作一个PV。

  • UV(访问人数,Unique Visitor):一定时间内访问某个页面的人数。

  • 转化率:计算方法与具体业务场景有关

    • 淘宝店铺,转化率=购买产品的人数/所有到达店铺的人数

    • 在广告业务中,广告转化率=点击广告进入推广网站的人数/看到广告的人数。

  • 转发率:转发率=转发某功能的用户数/看到该功能的用户数

产品数据指标💥

  • GMV (Gross Merchandise Volume):指成交总额,也就是零售业说的“流水”

  • 人均付费=总收入/总用户数

    • 人均付费在游戏行业叫ARPU(Average Revenue Per User)

    • 电商行业叫客单价

  • 付费用户人均付费(ARPPU,Average Revenue Per Paying User)=总收入/付费人数,这个指标用于统计付费用户的平均收入

  • 付费率=付费人数/总用户数。付费率能反映产品的变现能力和用户质量

  • 复购率是指重复购买频率,用于反映用户的付费频率。

推广付费指标💥

  • CPM(Cost Per Mille) :展现成本,或者叫千人展现成本

  • CPC(Cost Per Click) 点击成本,即每产生一次点击所花费的成本

  • 按投放的实际效果付费(CPA,Cost Per Action)包括:

    • CPD(Cost Per Download):按App的下载数付费;

    • CPI(Cost Per Install):按安装App的数量付费,也就是下载后有多少人安装了App;

    • CPS(Cost Per Sales):按完成购买的用户数或者销售额来付费。

💫根据目前的业务重点,找到北极星指标,在实际业务中,北极星指标一旦确定,可以像天空中的北极星一样,指引着全公司向着同一个方向努力。

Python指标计算案例

数据中包含了某电商网站从2009年12月到2011年12月两年间的销售流水, 每条记录代表了一条交易记录, 包含如下字段

Invoice: 发票号码

StockCode: 商品编码

Description: 商品简介

InvoiceDate: 发票日期

Price: 商品单价

Customer ID: 用户ID

Country: 用户所在国家

计算的指标

  • 月销售金额(月GMV)

  • 月销售额环比

  • 月销量

  • 新用户占比: 新老用户

  • 激活率

  • 月留存率

from datetime import datetime, timedelta
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns


data_1 = pd.read_excel('online_retail_II.xlsx',sheet_name='Year 2009-2010')
data_2 = pd.read_excel('online_retail_II.xlsx',sheet_name='Year 2010-2011')
数据清洗
retail_data['购买时间'].describe()

retail_data_clean = retail_data[(retail_data['商品单价']>0) & (retail_data['购买数量']>0)
计算月销量指标

商品编号相当于 SKU,SKU=Stock Keeping Unit(库存量单位)

retail_data_clean = retail_data_clean.query("(商品编号!='B') and (商品编号!='TEST001') and (商品编号!='TEST002') ")


retail_data_clean['购买年月'] = pd.to_datetime(retail_data_clean['购买时间']).dt.to_period('M')

retail_data_clean['金额'] = retail_data_clean['商品单价'] * retail_data_clean['购买数量']

gmv_m = retail_data_clean.groupby(['购买年月'])['金额'].sum().reset_index()

gmv_m.columns = ['购买年月', '月GMV']
计算月销售额环比
gmv_m['金额'].pct_change()
  • 该函数计算当前单元格和上一个单元格差异的百分比
月均活跃用户分析

我们用数据中的购买记录来定义活跃  

mau = retail_data_clean.groupby('购买年月')['用户ID'].nunique().reset_index()
月客单价(活跃用户平均消费金额)

客单价 = 月GMV/月活跃用户数

final['客单价'] = final['金额']/final['用户数']
新用户占比

根据用户最近一次购买和第一次购买时间的差异,如果相同,则认为是新用户,否则老用户

retail_data_clean.groupby(['购买年月','用户类型'])['金额'].sum().reset_index()
分组统计后得到新老用户购买金额
激活率计算
  • 用户激活的概念:用户激活不等同于用户注册了账号/登录了APP,不同类型产品的用户激活定义各有差别

  • 总体来说,用户激活是指用户一定时间内在产品中完成一定次数的关键行为

# 统计每月激活用户数量
activation_count = retail[retail['首次购买年月'] == retail['注册年月']].groupby('注册年月')['用户ID'].count()
# 统计每月注册的用户数
regist_count = retail.groupby('注册年月')['用户ID'].count()


#按渠道统计每月不同渠道的激活用户数
activation_count = retail[retail['首次购买年月'] == retail['注册年月']].groupby(['注册年月','渠道'])['用户ID'].count()
#按渠道统计每月注册用户数
regist_count = retail.groupby(['注册年月','渠道'])['用户ID'].count()
#计算不同渠道激活率

月留存率 = 当月与上月都有购买的用户数/上月购买的用户数

应用Pandas合并数据集

- 组合数据的一种方法是使用“连接”(concatenation)
  - 连接是指把某行或某列追加到数据中
  - 数据被分成了多份可以使用连接把数据拼接起来
  - 把计算的结果追加到现有数据集,可以使用连接
  
import pandas as pd
df1 = pd.read_csv('concat1.csv')
df2 = pd.read_csv('concat2.csv')

# 可以使用concat函数将上面3个DataFrame连接起来,需将3个DataFrame放到同一个列表中
pd.concat([df1,df2])
    A    B    C    D
0   a0   b0   c0   d0
1   a1   b1   c1   d1
2   a2   b2   c2   d2
3   a3   b3   c3   d3
0   a4   b4   c4   d4
1   a5   b5   c5   d5
2   a6   b6   c6   d6
3   a7   b7   c7   d7


pd.concat([df1,df2],axis=1)
  A   B   C   D   A   B   C   D    
0  a0  b0  c0  d0  a4  b4  c4  d4 
1  a1  b1  c1  d1  a5  b5  c5  d5
2  a2  b2  c2  d2  a6  b6  c6  d6
3  a3  b3  c3  d3  a7  b7  c7  d7

df1.append(df2)
  A   B   C   D
0  a0  b0  c0  d0
1  a1  b1  c1  d1
2  a2  b2  c2  d2
3  a3  b3  c3  d3
0  a4  b4  c4  d4
1  a5  b5  c5  d5
2  a6  b6  c6  d6
3  a7  b7  c7  d7


genres.merge(tracks_subset, on='Id', how='left')
how参数指定连接方式
- how = ’left‘ 对应SQL中的 **left outer**  保留左侧表中的所有key
- how = ’right‘ 对应SQL中的 **right outer**  保留右侧表中的所有key
- how = 'outer' 对应SQL中的 **full outer**   保留左右两侧侧表中的所有key
- how = 'inner' 对应SQL中的 **inner**  只保留左右两侧都有的key

stocks_2016.join(stocks_2017, lsuffix='_2016', rsuffix='_2017', how='outer')
  • 关于axis:↓这个方向就是0维度,→这个方向就是1维度 !

业务背景:缺失关键指标

疫情期间,一家印度外卖餐厅想通过数据分析,数据挖掘提升销量,但是在历史数据中缺少了很重要的一个维度,用餐人数

订单表 菜单表

根据历史订单数据,推断出每个订单的用餐人数

订单表:

  • Order_Number 订单编号

  • Order_Date 订单日期

  • Item_Name 商品名称

  • Quantity 商品数量

  • Product_Price 商品价格

  • Total_products 订单商品数量

  • restaurant_no 连锁店编号

菜单表:

  • 商品名称

  • 商品价格

基本思路🔘

  • 1份主食对应1人 (1:1)

  • 1份主菜对应1人 (1:1)

  • 1份饮料对应1人(1:1)

  • 2份小食对应1人 (2:1)

  • 酱料,佐料不做计算(n:0)

drop table if exists food_type;
create table food_type as
SELECT
	item_name,
	price,
	restaurant_id,
	food_category,
CASE
		WHEN food_category IN ( '鸡肉类', '羊肉类', '虾类', '咖喱菜', '鱼肉类', '主菜', '芝士菜' ) THEN
		'主菜' 
		WHEN food_category IN ( '饼', '米饭' ) THEN
		'主食' 
		WHEN food_category IN ( '饮料', '酒', '酸奶' ) THEN
		'饮料' 
		WHEN food_category IN ( '酱', '腌菜' ) THEN
		'佐料' ELSE '小食' 
	END AS food_type 
FROM
	food_category_table;

目前一行记录是一笔订单的一种产品的售卖情况,如果一笔订单有若干样产品会分成若干行,我们希望把一笔订单的详情,从多行统一到一行中,同时用我们事先定义的系数计算。

select a.`Order_Number`,a.`Order_Date`,a.restaurant_id,round(sum(a.Quantity*b.price),2) as total_amount, # 计算订单总金额
sum(case when food_type='主食' then a.Quantity*1 else 0 end) as staple_food_count, # 聚合操作,分别统计出每个菜名类别对应的人数
sum(case when food_type='主菜' then a.Quantity*1 else 0 end) as main_course_count,
sum(case when food_type='饮料' then a.Quantity*1 else 0 end) as drink_count,
sum(case when food_type='小食' then a.Quantity*0.5 else 0 end) as snack_count
from restaurant_orders a join food_type b 
on a.`Item_Name`=b.item_name and a.Restaurant_Id=b.restaurant_id # 把a表和b表合并
group by a.`Order_Number`,a.`Order_Date`,a.Restaurant_Id; # 合并后分组

比较主食,主菜,饮料,小食中的最大者:

select c.*,GREATEST(c.staple_food_count,c.main_course_count,c.drink_count,c.snack_count) as max_count from 
(select a.`Order_Number`,a.`Order_Date`,a.restaurant_id,round(sum(a.Quantity*b.price),2) as total_amount,
sum(case when food_type='主食' then a.Quantity*1 else 0 end) as staple_food_count,
sum(case when food_type='主菜' then a.Quantity*1 else 0 end) as main_course_count,
sum(case when food_type='饮料' then a.Quantity*1 else 0 end) as drink_count,
sum(case when food_type='小食' then a.Quantity*0.5 else 0 end) as snack_count
from restaurant_orders a join food_type b 
on a.`Item_Name`=b.item_name and a.Restaurant_Id=b.restaurant_id
group by a.`Order_Number`,a.`Order_Date`,a.Restaurant_Id) c;

增加向下取整的逻辑,并且确保最小就餐人数为1

floor 向下取整
select c.*,
GREATEST(floor(GREATEST(c.staple_food_count,c.main_course_count,c.drink_count,c.snack_count)),1) as customer_count from 
(select a.`Order_Number`,a.`Order_Date`,a.restaurant_id,round(sum(a.Quantity*b.price),2) as total_amount,
sum(case when food_type='主食' then a.Quantity*1 else 0 end) as staple_food_count,
sum(case when food_type='主菜' then a.Quantity*1 else 0 end) as main_course_count,
sum(case when food_type='饮料' then a.Quantity*1 else 0 end) as drink_count,
sum(case when food_type='小食' then a.Quantity*0.5 else 0 end) as snack_count
from restaurant_orders a join food_type b 
on a.`Item_Name`=b.item_name and a.Restaurant_Id=b.restaurant_id
group by a.`Order_Number`,a.`Order_Date`,a.Restaurant_Id) c;

结果解读🐣

精细化运营:和精细化运营相对的是粗放式运营,也就是在流量红利还在的时候,采用固定几种运营方式,大家看到的东西都是一样的,根据大众最终的实验效果去反馈运营策略。

用户标签:每一个用户与企业的商业目的相关较强的特质提取出来,就是用户标签,也叫用户画像

​​​​​​​每一个用户与企业的商业目的相关较强的特质提取出来,就是用户标签,也叫用户画像,

用户标签是精细化运营的抓手,发现兴趣,投其所好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

15 - 有趣的电影(高频 SQL 50 题基础版)

15 - 有趣的电影 select* from cinema wheredescription!boring and id%2!0 order by rating desc;

医用腕带朔源用的条形码与二维码如何选择

在医疗环境中的医用腕带作为患者身份识别和管理的重要工具,做为条形码和二维码腕带上的溯源技术,更是为患者信息快速获取、准确传递的保障,实现更加高效和准确的患者身份识别和管理,这种技术可以大大提高医疗服务的效率和质量&…

v1.2.70-FastJson的AutoType机制研究

v1.2.70-FastJson的AutoType机制研究 最近在对接Alexa亚马逊语音技能,Smart Home Skill Apis时,有一个配置的JSON字符串是这样的: { "capabilityResources": {"friendlyNames": [{"type": "asset",…

如何组织基于Sqlalchemy的项目

在使用 SQLAlchemy 构建项目时,可以遵循一些常用的组织结构和最佳实践,以确保项目清晰、易于维护。下面就是我在构建项目时遇到的一些问题,并做了详细的记录,为了方便大家学习少走一些弯路。 1、问题背景 在基于Sqlalchemy的项目…

python 内置map()函数(高效处理序列数据方法,将函数应用于一个序列的每个元素)(懒加载)

文章目录 深入解析 Python 内置函数 map()函数定义与用法基本示例 map() 与列表推导式比较(列表推导式在语法上更加简洁, map() 在某些情况下执行效率更高)示例:将数字转化为字符串 map() 结合 lambda 函数使用多个序列结论 深入解…

边缘计算网关助力自动洗车机实现远程状态监测与即时报警

随着城市化进程的加快和人们生活水平的提高,自动洗车机作为一种高效、便捷的洗车设备,在市场上的需求日益增长。然而,自动洗车机作为一种高价值的自动化设备,其运行状态和安全性直接关系到洗车质量和顾客体验,因此对自…

SL4010 40V耐压 300W大功率升压IC 12V5A大功率UPS电源专用

在当今这个信息高速发展的时代,电力稳定已成为企业运营和个人生活的核心需求。UPS(不间断电源)作为电力的守护者,其性能和质量直接关系到我们的工作和生活能否顺畅进行。今天,我们为您推荐一款高性能的UPS应急电源芯片…

RPC框架原理(一)

RPC框架原理 网络和IO的关系,IO(input和output)面向的是谁?OSI 7层参考模型,TCP/IP协议为什么会出现一个会话层三次握手socket心跳keep alive四次挥手 网络IO(IO模型) IO框架底层 学习顺序&…

k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用

文章目录 sessionAffinity简介什么是sessionAffinity模式介绍应用场景工作原理优势 应用环境步骤2. 给服务打补丁,增加会话粘滞 设置回sessionAffinity为None sessionAffinity简介 什么是sessionAffinity 简单理解 确保把来自同一客户的一个完整会话的请求转发至后…

喜讯丨泰迪智能科技实力中标“健康大数据与人工智能实验室建设”项目

泰迪智能科技以健康数据分析与应用为主题的实验中心,为学校大健康产业大数据与人工智能应用人才培养提供载体,并基于培养中心根据学生专业的不同,提供不同的健康大数据学习资源,实现健康大数据技术和数据分析应用能力培养普遍提升…

深入理解计算机系统 家庭作业5.13

A:关键路径在xmm0那条路,书中几条关键路径全部是xmm0,有xmm1时,xmm1也是 B:3 C:1 D:按书中的定义: 关键路径才是下界!按书上的方法根据 图5-12 算出关键路径的CPE即可. 非关键路径把它视为黑盒子.因为是乱序和超标量的,没办法搞清楚处理器具体怎么处理这些指令.

c# 开发的wpf程序闪退,无法用try catch捕获异常

之前开发的一个程序是c#wpf开发,基于.net framework 4.6.1的,一切都是正常的,但是在我重新装了win11后在程序logo出现后直接闪退,报错 返回值为 -1073740791 (0xc0000409),而且定位到代码时发现是, publi…

LabVIEW2017破解安装教程

LabVIEW2017破解安装教程: 1、新版LabVIEW2017分为32位和64位两个平台,多种语言版本(需要LabVIEW2017中文版的朋友请选择WinChn版本),大家选择自行选择符合系统的版本下载并解压 2、本次安装以Win 7 64位系统为例,运行“2017LV-64…

accelerate 笔记:梯度同步的时间效率

1 介绍 PyTorch 的分布式模块通过在系统中所有GPU之间进行来回通信来操作。 这种通信需要时间,并且确保所有进程了解彼此的状态在使用ddp模块时会在特定的触发点发生 这些触发点被添加到PyTorch模型中,特别是它们的 forward() 和 backward() 方法中当通…

宝德电脑文件删除了怎么恢复?提供详细恢复指南

在数字化时代,电脑已成为我们工作、学习和生活中不可或缺的设备。然而,在使用宝德电脑或其他任何品牌的电脑时,我们都有可能遭遇文件误删的尴尬情况。一旦重要文件丢失,不仅会影响我们的工作效率,还可能造成无法挽回的…

打开C# 大门:Hallo, World!

C# 介绍 C#(C Sharp)是一种面向对象的编程语言,由微软公司开发。它是 .NET Framework 的一部分,用于构建 Windows 应用程序、Web 应用程序、移动应用程序等。C# 语言的设计目标是简单、现代化、易于学习和使用。在本文中&#xf…

26、matlab多项式曲线拟合:polyfit ()函数

1、polyfit 多项式曲线拟合 语法 语法:p polyfit(x,y,n) 返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(基于最小二乘指标)。 语法:[p,S] polyfit(x,y,n) 还返回一个结构体 S 语法:[…

铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。工业物联数字孪生平台以5G技术为基础,通过工业物联网连接铸铁机械生产过程中的各个环节,运用数字孪生技术构建虚拟工厂,实现生产过程的实时监测、模拟与优化&#…

花费-效益分析筛选肿瘤标记物最佳组合

基于花费-效益分析的肿瘤标记物最佳组合筛选 本文的想法来自于一篇发表的论文[1]。论文作者有感于临床上存在的不恰当的肿瘤标记物的检测,搜集了各种肿瘤标记物(TM)的价格、检测结果和最终诊断等数据,使用逻辑回归模型分别计算出…

2024-06-05 Android app jni里面c语言函数申请的局部变量数组过大会导致程序崩溃的问题分析

一、下面是一个app jni里面一个函数,函数里面定义一个数组,实际运行的时候发现数组过大的时候会导致app崩溃。 JNIEXPORT jint JNICALL JNI_FUNCTION(native_1getcapture_1data)(JNIEnv *env, jobject obj,jbyteArray des_data,jbyteArray src_data,jin…