机器学习多场景实战

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

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

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

数据指标在企业和组织的运营管理中发挥着至关重要的作用,它们不仅是衡量和评价业务性能的工具,还是推动业务发展和改进的关键因素。 

活跃用户指标💥 

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

  • 日活(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 snsdata_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   d7pd.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  d7df1.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  d7genres.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**  只保留左右两侧都有的keystocks_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
SELECTitem_name,price,restaurant_id,food_category,
CASEWHEN food_category IN ( '鸡肉类', '羊肉类', '虾类', '咖喱菜', '鱼肉类', '主菜', '芝士菜' ) THEN'主菜' WHEN food_category IN ( '饼', '米饭' ) THEN'主食' WHEN food_category IN ( '饮料', '酒', '酸奶' ) THEN'饮料' WHEN food_category IN ( '酱', '腌菜' ) THEN'佐料' ELSE '小食' END AS food_type 
FROMfood_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;

结果解读🐣

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

精细化运营与粗放式运营有着本质的区别。在流量红利充沛的时期,粗放式运营可能通过大规模、统一的推广方式就能获得显著成效。然而,随着市场环境的变化和竞争的加剧,这种方法的效果逐渐减弱。此时,精细化运营应运而生,它强调的是根据每个用户的特性和需求来制定个性化的运营策略。

要实现精细化运营,关键在于深入理解和把握用户的个性与需求。这里就引出了“用户标签”或“用户画像”的概念。用户标签是对每个用户与企业商业目的紧密相关的特质的提炼,这些特质可能包括用户的年龄、性别、职业、兴趣、消费习惯等。通过这些标签,企业可以更加精准地了解用户,进而制定出更符合用户需求的运营策略。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VsCode中C文件调用其他C文件函数失败

之前一直使用CodeBlocks,最近使用vscode多,感觉它比较方便,但在调用其他C文件的时候发现报错以下内容基于单C文件运行成功,否则请移步 博文:VSCode上搭建C/C开发环境 报错信息 没有使用CodeRunner插件,弹…

Shell脚本 if语句

条件测试: $? 返回码 判断命令或者脚本是否执行成功(最近的一条) 0 true 为真就是成功 成立 非0 false 失败或者异常 test命令 可以进行条件测试 然后根据的是返回值来判断条件是否成立。 -e 测试目录或者文件是否存在 exist -d 测试…

Docker 管理 | 代理配置、内网共享和 Harbor 部署

唠唠闲话 在现代软件开发和运维中,容器技术已经成为构建、部署和管理应用程序的标准工具。然而,在实际操作中,我们常常需要面对一些常见的挑战,如容器访问外部资源的代理配置、内网环境下的镜像共享以及企业级镜像管理。 本教程…

Chrome/Edge浏览器视频画中画可拉动进度条插件

目录 前言 一、Separate Window 忽略插件安装,直接使用 注意事项 插件缺点 1 .无置顶功能 2.保留原网页,但会刷新原网页 3.窗口不够美观 二、弹幕画中画播放器 三、失败的尝试 三、Potplayer播放器 总结 前言 平时看一些视频的时候&#xff…

vivado HW_SIO_RX

HW_SIO_RX 描述 在硬件设备上,每个GT包括一个独立的接收器hw_sio_rx 由一个PCS和一个PMA组成。高速串行数据从板上的迹线流入 GTX/GTH收发器RX的PMA,进入PCS,最后进入FPGA逻辑。 相关对象 HW_SIO_RX对象与HW_server、HW_target、HW_device、H…

迅狐跨境商城系统|全平台兼容|前端采用uni-app跨端框架,后端采用ThinkPHP5框架

高效实现全平台兼容的迅狐跨境商城系统 迅狐跨境商城系统是一款专为跨境电商企业设计的全平台兼容系统。其前端采用uni-app跨端框架,后端采用ThinkPHP5框架,旨在实现高效的开发和运营管理。 1. 全平台兼容的前端设计 迅狐跨境商城系统的前端采用uni-a…

LeetCode | 27.移除元素

这道题的思路和26题一模一样,由于要在元素组中修改,我们可以设置一个index表示目前要修改原数组的第几位,由于遍历,访问原数组永远会在我们修改数组之前,所以不用担心数据丢失的问题,一次遍历数组&#xff…

晨持绪科技:抖音网店怎么做有前景

在数字时代的浪潮中,抖音平台以其独特的魅力和庞大的用户基础成为电商的新阵地。开设一家有前景的抖音网店,不仅需要对市场脉搏有敏锐的洞察力,还需融合创新思维与数据驱动的营销策略。 明确定位是成功的先声。深入分析目标消费群体的需求与偏…

函数递归(C语言)(详细过程!)

函数递归 一. 递归是什么1.1 递归的思想1.2 递归的限制条件 二. 递归举例2.1 求n的阶乘2.2 按顺序打印一个整数的每一位 三. 递归与迭代3.1 求第n个斐波那契数 一. 递归是什么 递归是学习C语言很重要的一个知识,递归就是函数自己调用自己,是一种解决问题…

为什么电容两端电压不能突变

我们先从RC延时电路说起吧,图1是最简单的RC延时电路,给一个阶跃的电压信号,电压会变成黄色曲线这个样子,这是为什么呢? 图1 电压跳变后,电源负极电子移动到电容下极板,排斥上极板电子流动到电源…

string经典题目(C++)

文章目录 前言一、最长回文子串1.题目解析2.算法原理3.代码编写 二、字符串相乘1.题目解析2.算法原理3.代码编写 总结 前言 一、最长回文子串 1.题目解析 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s “babad” 输出&am…

机器学习笔记 - 用于3D数据分类、分割的Point Net简述

一、简述 在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transformer方法,几乎任何 2D 图像应用都会有某种现有的方法。然而,当涉及到 3D 数据时,现成的工具和方法并不那么丰富。3D 空间中一个工具就是Point …

HTML静态网页成品作业(HTML+CSS)—— 非遗皮影戏介绍网页(6个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有6个页面。 二、作品演示 三、代…

C++day5

思维导图 搭建一个货币的场景,创建一个名为 RMB 的类,该类具有整型私有成员变量 yuan(元)、jiao(角)和 fen(分),并且具有以下功能: (1)重载算术运算符 和 -…

SQL 窗口函数

1.窗口函数之排序函数 RANK, DENSE_RANK, ROW_NUMBER RANK函数 计算排序时,如果存在相同位次的记录,则会跳过之后的位次 有 3 条记录排在第 1 位时: 1 位、1 位、1 位、4 位…DENSE_RANK函数 同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次 有 3 条记录排在…

bfs+枚举,CF666B - World Tour

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 666B - Codeforces 二、解题报告 1、思路分析 数据量允许跑N次bfs预处理所有点的最短路,以及预处理到达每个点距离最远的3个点,以及每个点能够到达的最远的3个点 我们枚举…

独立游戏《星尘异变》UE5 C++程序开发日志4——实现任务系统

本游戏作为工厂游戏,任务系统的主要功能就是给玩家生产的目标和动力,也就是给玩家发布一个需要一定数量某星尘的订单,玩家提交需要的星尘后会获得奖励,游戏中实际的奖励机制略微有点复杂,这里直接简化为完成任务后就能…

【StableDiffusion】Lora 底层原理,低秩适配,Lora 如何与 checkpoint 联合发挥作用

鸣谢UP主:是花子呀 本篇博客参考视频:https://www.bilibili.com/video/BV17i421X7q7/?spm_id_from333.880.my_history.page.click&vd_source38d6ea3466db371e6c07c24eed03219b Lora 是个啥?Lora 的 缩写 Lora:Low Rank Ada…

day35| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

文章目录 前言860.柠檬水找零思路方法一 406.根据身高重建队列思路方法一 452. 用最少数量的箭引爆气球思路方法一 总结 前言 860.柠檬水找零 思路 很简单,贪心只有一个,如果20优先用105找零,因为5更加万能一些 方法一 class Solution(ob…

R语言统计分析——图形文本、自定义坐标轴和图例

参考资料&#xff1a;R语言实战【第2版】 我们可以在图形上添加标题&#xff08;main&#xff09;、副标题&#xff08;sub&#xff09;、坐标轴标签&#xff08;xlab、ylab&#xff09;并指定标轴范围&#xff08;xlim、ylim&#xff09;。 # 录入数据 dose<-c(20,30,40,4…