机器学习多场景实战

news2024/11/18 9:41:15

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

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

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

常用的业务指标💥

活跃用户指标💥 

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

  • 日活(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;

结果解读🐣

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot项目中,如何在yml配置文件中读取maven pom.xml文件中的properties标签下的属性值

一、前言 在最近的项目开发过程中&#xff0c;有一个需求&#xff0c;需要在Spring Boot项目的yml配置文件中读取到mave的 pom.xml文件中的properties标签下的属性值&#xff0c;这个要怎么实现呢&#xff1f; 二、技术实践 pom.xml文件中增加测试属性 <properties><…

【数据结构】筛选法建堆

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Golang | Leetcode Golang题解之第134题加油站

题目&#xff1a; 题解&#xff1a; func canCompleteCircuit(gas []int, cost []int) int {for i, n : 0, len(gas); i < n; {sumOfGas, sumOfCost, cnt : 0, 0, 0for cnt < n {j : (i cnt) % nsumOfGas gas[j]sumOfCost cost[j]if sumOfCost > sumOfGas {break}…

Android 14.0 Settings主页面去掉自定义您的设备等菜单相关功能

1.前言 在14.0的系统rom产品定制化开发中,在系统Settings主页面的主菜单中,在测试某些功能的时候,比如开启护眼模式和改变系统密度会在主菜单第一项的网络菜单头部增加 自定义您的设备和设置护眼模式时间安排 等等相关的设置模块 这对于菜单布局显示相当不美观,所以根据系…

TSR,FSR,DLSS超级分辨率的原理分析

先了解一些时域抗锯齿的方法&#xff1a; TAA&#xff1a; 抖动 TAA 的主要原理是跨帧计算多个子像素样本&#xff0c;然后将它们组合成一个最终像素。最简单的方案是在像素内生成随机样本&#xff0c;但有更好的方法来生成固定序列的样本。选择一个好的序列以避免聚集非常重…

MacOS 安装C语言版TensorFlow

文章目录 安装C语言版TensorFlow解压归档环境变量c_api.hC语言示例 安装C语言版TensorFlow 官方文档&#xff1a;https://tensorflow.google.cn/install/lang_c?hlzh-cnTensorFlow 提供了一个 C API&#xff0c;该 API 可用于为其他语言构建绑定。该 API 在 c_api.h 中定义&a…

我有点想用JDK17了

大家好呀&#xff0c;我是summo&#xff0c;JDK版本升级的非常快&#xff0c;现在已经到JDK20了。JDK版本虽多&#xff0c;但应用最广泛的还得是JDK8&#xff0c;正所谓“他发任他发&#xff0c;我用Java8”。 其实我也不太想升级JDK版本&#xff0c;感觉投入高&#xff0c;收…

【TB作品】 51单片机8x8点阵显示滚动汉字仿真

功能 题目5基于51单片机LED8x8点阵显示 流水灯 直接滚动显示HELLO 直接滚动显示老师好 代码 void main( void ) {/** 移位后&#xff0c;右边的是第一个595&#xff0c;接收0X02&#xff0c;显示出0X02* 移位后&#xff0c;左边的是第2个595&#xff0c;接收0Xfe&#xff0c…

C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

人工智能任务5-高级算法工程师需要学习哪些课程与掌握哪些能力

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能的任务5-高级算法工程师需要学习哪些课程&#xff0c;需要掌握哪些能力。高级算法工程师需要掌握的算法模型有&#xff1a;人脸检测模型MTCNN&#xff0c;人脸识别方法Siamese network、center loss、softm…

在VSCode中安装python

引言 Python 是一种广泛使用的高级编程语言&#xff0c;因其易学、易用、强大而受到欢迎。它由 Guido van Rossum 于 1991 年首次发布&#xff0c;并以简洁的语法和丰富的库生态系统而著称。 以下是 Python 的一些关键特点和优势&#xff1a; 关键特点 易于学习和使用&#x…

AWS的EC2之间ping不通,服务之间不通,怎么办

AWS启动的两个EC2实例&#xff0c;互相访问不了 修改安全组规则&#xff0c;添加ICMP 流量的入站规则 参考&#xff1a;AWS的EC2之间ping不通,服务之间不通,怎么办_aws ec2同一个区域的服务器-CSDN博客

选择排序-Java版本

选择排序 算法的思想&#xff1a;java模拟 算法的思想&#xff1a; 每遍历一次就找一个最小的数 *外层 一共遍历 length-1次 总遍历次数符合等差数列 时间复杂度为O(n^2)内部查找 并 返回 数值 和 下标 java模拟 public static void selectSort(int[] arr) {for(int i 0;i<…

MyBatis拦截器使用方法

前言 MyBatis拦截器可以做的工作&#xff1a;SQL修改&#xff0c;分页操作&#xff0c;数据过滤&#xff0c;SQL执行时间性能监控等。 1. 基础介绍 1.1. 核心对象 从MyBatis代码实现的角度来看&#xff0c;MyBatis的主要的核心部件有以下几个&#xff1a; Configuration&am…

InfiniGate自研网关实现思路七

25.网关Nginx负载模型配置 通过模拟多个HTTP服务配置到 Nginx 做负载均衡&#xff0c;以学习API网关负载的配置和使用 API 网关是用于支撑分布式 RPC 接口协议转换提供 HTTP 调用的一套服务&#xff0c;那么 API 网关系统就需要可横向扩展来满足系统的吞吐量诉求。所以这里需…

如何根据业务需求,轻松挑选SSL证书?

在当今数字化时代&#xff0c;网站的安全性愈发受到重视。SSL证书作为网站安全的“守门员”&#xff0c;不仅能保护用户数据不被窃取&#xff0c;还能提升网站的信任度。但面对市场上琳琅满目的SSL证书产品&#xff0c;如何根据业务需求挑选合适的证书呢&#xff1f;今天&#…

今日份动态规划学习

主要只搞了一个这道题&#xff0c;有点摸鱼了今天晚上&#xff0c;也是来小看一下这道题吧01背包完全背包 P1941 [NOIP2014 提高组] 飞扬的小鸟 题意&#xff1a; 这题是说&#xff0c;给我们一个游戏界面&#xff0c;界面的长度为n&#xff08;水平距离&#xff09;&#x…

Java | Leetcode Java题解之第134题加油站

题目&#xff1a; 题解&#xff1a; class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n gas.length;int i 0;while (i < n) {int sumOfGas 0, sumOfCost 0;int cnt 0;while (cnt < n) {int j (i cnt) % n;sumOfGas gas[j];sumOfCos…

【活动】程序员的核心职业素养:技术与人文并重的探索之旅

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 程序员的核心职业素养&#xff1a;技术与人文并重的探索之旅1. 持续学习与技术精…

Python Lambda函数的应用实例教程

在Python编程中&#xff0c;lambda函数是一种简洁且强大的工具&#xff0c;用于创建小型匿名函数。它们在需要快速定义简单函数时特别有用。本文将详细介绍lambda函数的语法及其多种应用实例&#xff0c;帮助读者更好地理解和使用lambda函数。 一、lambda函数的基本概念 1.1 什…