最近看到一篇文章:https://rudderstack.com/blog/churn-prediction-with-bigqueryml,主要是讲使用 BigQueryML 进行流失预测。首先解释下 BigQueryML 是什么,简而言之,就是使用 SQL 也可以完成机器学习模型的构建。
利用 BigQuery ML,您可以使用标准 SQL 查询在 BigQuery 中创建和执行机器学习模型。BigQuery ML 让 SQL 专业人员能够使用现有的 SQL 工具和技能构建模型,从而实现机器学习的普及。使用 BigQuery ML,无需移动数据,加快了开发速度。
其实两年前就看到相关文章,比如阿里的SQLFlow,使用 SQL 实现机器学习,但是 Python 在机器学习领域的生态太强大了,虽然使用 SQL 要比 Python 的门槛更低,我依然觉得这个不会应用到生产环境或者实际使用,直到看到这篇文章使用 BigQueryML 进行流失预测。似乎现在有一部分用户开始玩 SQL 这一套了。
先看看这篇文章的案例是怎么实现机器学习的。首先是建立相关的数据集:
CREATE TABLE FIRST_REV_DATE_TABLE AS
SELECT
anonymous_id, rev_date as first_rev_date
FROM (
SELECT anonymous_id
, DATE_TRUNC( 'd' , sent_at)作为rev_date
, RANK () OVER ( PARTITION by anonymous_id
ORDER BY sent_at DESC ) as rank
FROM RUDDER.track
WHERE event = 'revenue'
) WHERE
rank = 1
然后就是建立模型了:
CREATE OR REPLACE MODEL `rudder_project..tbl_create_model_1`
OPTIONS (
model_type='LOGISTIC_REG'
,auto_class_weights=TRUE
,data_split_method='NO_SPLIT'
,input_label_cols=['churn']
,max_iterations = 12)
AS
SELECT *
FROM `rudder_project..tbl_player_reg`
where player_pool = "training" and high_value = 'false'
性能评估使用的SQL是:
SELECT *
FROM ML.EVALUATE
( MODEL `rudder_project..tbl_create_model_1` ,
( SELECT *
FROM `rudder_project..tbl_player_reg` WHERE player_pool = "test" and high_value = 'false'
)
)
以及最后的预测环节:
SELECT * FROM (
SELECT u as user_id, predicted_churn
FROM ML.PREDICT
(
MODEL `rudder_project..tbl_create_model_1`,
(
SELECT *
FROM `rudder_project..tbl_player_reg`
WHERE high_value = 'true'
)
, STRUCT(0.5 AS threshold)
) order by predicted_churn
)
在整个流程里,只有SQL语句,对于用户而言,我只要了解有哪些模型、模型的大致原理是怎么的、模型的应用场景和有哪些优势和劣势,至于模型是怎么实现的,用户可以不用再关心了。甚至都不需要繁琐的完成不同数据源之间的传输工作了。
如果这种方式真的能成熟的话,做业务分析的同事也是可以用 SQL 完成机器学习了,而不需要拜托专门的做算法的同学去完成建模分析,对于企业而言,其实大部分场景只需要简单的数据分析和挖掘模型就行了,使用 SQL 完成机器学习模型能真的应用到生产环境,那就是一件突破性的事。
因为我只是看了文章,调研下相关资料,没有实际用过,细节也就不太清楚了。感兴趣的读者可以参考阅读下面的文章: