Machine Learning - A/B Test

A/B test 并不是机器学习独有的概念,事实上随处可见,来感受下我身上的俩例子… 前两天买了一箱咖啡,打开后大部分还依旧是喜欢的包装,但有一小部分新包装,同时收到了用户调查,问是否喜欢新包装… 还比如,老婆给做饭,掺了一些新牌子的大米,问我口感咋样… 相信你也应该能立刻联想到自己也在不知不觉中被动做了很多A/B Test… LOL

那么回到机器学习,当创建了两个模型,或者同一个但使用不同参数的模型,怎么evaluate哪个好哪个坏?这时就可以考虑使用 A/B test;可将待比较的模型同时部署,通过控制流量/traffic,来比较两个模型的实际效果;

下面一个简单例子来实际展示下A/B Test在 Machine Learning中的应用;

下面例子使用MLflow打包SKlearn模型文件,Seldon模型部署

模型训练

并不是数据科学家,算法部分直接使用官网例子,请不要见笑

Machine Learning - A/B Test
先在本机Jupyter内使用不同参数(红框)创建两个模型;

A/B TEST

下面我会将这两个模型,同时部署到Seldon上,使用Istio做流量分发管理;
Machine Learning - A/B Test
可以看到红框处定义了,model-a 80%的traffic,model-b 20%的traffic;

now部署,稍作等待就会看到这里有2个pod,与model是1-1的;
Machine Learning - A/B Test
同时,不仅是pod,service和endpoint也都一并1-1的启动了;
Machine Learning - A/B Test
Machine Learning - A/B Test
接下来就要看看Istio作为Ingress是否启用,同时traffic是否分发正确;注意,这里虽然是两个model,但公用一个 API URL;

首先我们用Postman模拟用户的请求,先跑它个1000次;
Machine Learning - A/B Test
因为要做predict,需要参数,下面是单次预测结果;
Machine Learning - A/B Test
运行的同时就可以去Istio瞧瞧了,果然traffic是按照8-2分的,不欺我也;
Machine Learning - A/B Test
Machine Learning - A/B Test
万事具备,只欠evaluate了… 只是我的电脑实在不给力,这个时候歇菜…

不过最后一步就是看这两个model哪个好哪个坏了,类似与下图,只不过里面会有这两个model的数据,两种颜色哦,下次补个图…
Machine Learning - A/B Test