CustomUserSegmenter 使用说明

最后更新于:2015-12-17 20:35:16

1. 概述

CustomUserSegmenter 是一个用于实现自定义的用户分群功能的小工具。具体来说,它可以将自定查询功能中的 SQL 执行的结果作为一个用户的 Profile 重新导入 Sensors Analytics,以实现一些比较复杂的分析需求。

假设我们现在希望按照用户购买商品的频率(例如高、中、低),来分析不同购买频率的用户在购买的商品类型、留存情况、支付习惯等方面的区别,那么就可以使用此工具来把用户 购买商品的频率 作为一个属性导入 Sensors Analytics,之后便可以和所有其它属性一样在任意分析功能里进行自由使用。

该工具目前可以从 GitHub 直接下载,支持 Sensors Analytics 1.1.361 及更高版本。

2. 使用说明

CustomUserSegmenter 是一个 Python 工具(只支持 Python3),可以通过 Python 直接调用,当然更简单的做法是在命令行执行。此外,CustomUserSegmenter 的执行还需要依赖 Python SDK

CustomUserSegmenter 的核心参数是一个 SQL,这个 SQL 的结果包含了用户分群的结果。此 SQL 可以是任意自定义查询支持的 SQL,但是它的返回结果应当包含且仅包含以下三列,按顺序分别是:

  1. user_id:用户内部 ID
  2. distinct_id:用户原始 ID
  3. segment:分群结果,可以是数字或者字符串

假设我们需要按用户购买行为的频率进行分组,那么 SQL 可以是:

SELECT
user_id,
get_distinct_id(user_id) AS distinct_id,
CASE
    WHEN cnt <=3 THEN '0~3'
    WHEN cnt <= 10 THEN '4~10'
    ELSE '>10'
END AS segment
FROM (
    SELECT user_id, COUNT(*) AS cnt FROM events
    WHERE event = 'PayOrder' AND date >= '2015-10-1'
    GROUP BY 1
) a

CustomUserSegmenter 的其它参数包括:

  1. --api_url:API 的地址,详细说明见 查询 API
  2. --api_token:API 的 Token。
  3. --logging_url:数据导入的 URL,和 SDK 的一致。
  4. --temp_dir:一个用于存放临时文件的本地目录,需要预先建立好。
  5. --sql_file: 存放分群 SQL 的文本文件的地址,考虑到 SQL 可能会很长,所以需要先放在文件里。
  6. --profile_name: 分群属性的名称,例如 BuyTimes,字符串类型,不需要预先建立。不建议频繁新建过多的 Profile,如果是临时需求可以复用同一个字段。

下面是一个完整的调用脚本,用于将用户按照最近 60 天的购买频率进行分群:

last_date=`date -d '-60 days' "+%Y-%m-%d"`
sql="
SELECT
user_id,
get_distinct_id(user_id) AS distinct_id,
CASE
    WHEN cnt <=3 THEN '0~3'
    WHEN cnt <= 10 THEN '4~10'
    ELSE '>10'
END AS segment
FROM (
    SELECT user_id, COUNT(*) AS cnt FROM events
    WHERE event = 'PayOrder' AND date >= '$last_date'
    GROUP BY 1
) a
"
echo $sql > segmenter.sql
python3 custom_user_segmenter.py -w "http://127.0.0.1:8007/api" -l "http://127.0.0.1:8006/sa" -t f5831247df07bf04f7c118cbf410a241f5831247df07bf04f7c118cbf410a241 -d tmp -f segmenter.sql -n 'BuyTimes'

如果需要定时运行,记得把它加入 crontab 中。