This commit is contained in:
louzefeng
2024-07-09 18:38:56 +00:00
parent 8bafaef34d
commit bf99793fd0
6071 changed files with 1017944 additions and 0 deletions

View File

@@ -0,0 +1,130 @@
<audio id="audio" title="17 | 模型评估从一个失控的项目看优秀的产品经理如何评估AI模型" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/39/eb/39075576d235ed5aa9a2065ed74ea3eb.mp3"></audio>
你好,我是海丰。今天,我们正式进入模型评估能力篇的学习。
在开始今天的课程之前我想请你先想一想你在工作中推进AI相关产品需求的时候是不是经常会遇到这样的问题。
在算法模型上线阶段,你拿不准到底要不要验收算法同学交付的模型,就算你想要验收,你也不知道该怎么去评估模型的好坏,只能算法同学说什么就是什么,甚至对算法同学说的名词都没有概念,非常被动。
针对这个问题这节课我想和你分享一个我曾经踩过的坑。我会通过我处理这个事故的过程来和你详细讲讲在推进AI相关项目的时候我们该如何去评估一个模型怎么化被动为主动。
## 问题复现一个没有经过验收的金融大数据风控AI产品
我先来讲讲整个事情的背景。因为AI在金融领域的发展一直处于引领的地位所以基于大数据的AI风控产品也层出不穷。我的团队主营业务就是给金融机构做AI大数据风控开发一个**信用评估模型**,这个产品的功能就是基于借款人的留存信息,预测他未来是否可能会逾期还款。
金融机构在给借款人放款之前会通过系统调用我们这个模型,如果模型返回“逾期”,金融机构就会拒绝借款人的贷款申请,反之就通过这个借款人的申请。下面是一个最为简单的信贷申请流程样例:
<img src="https://static001.geekbang.org/resource/image/03/55/03ca09e5af078f0e6964230fc6454c55.jpeg" alt="">
本来,上线后模型表现一直还不错。但是突然有一天,我们的客户反馈,模型对所有借款人预测的结果都是“逾期还款”,当天所有借款人向这个客户提交的贷款申请全部被拒绝了,影响的金额巨大。这样的线上事故简直就是灾难,直接导致我们客户的线上业务全部停滞。
于是,我和几个核心人员紧急开会讨论。最后发现,模型全部返回“逾期”是因为,算法工程师在模型中引用的一个重要特征突然全部返回空值。后来,算法同学紧急调整了模型代码并重新上线才解决了问题。问题虽然解决了,模型的预测效果却下降很多,也给金融机构造成了极大的损失。
## 事故复盘:我们犯的三个错误
事后,我和我的团队按照模型的上线时间线,组织了事故复盘,找到了造成这次事故的问题,主要有三个,我一个一个来说。
**第一:模型上线前无评估。**当模型构建完成后,没有经过产品经理验收,导致这个问题没有被提前发现。
**第二:模型上线后无监控。**当模型在上线之后,大家都没有对模型进行监控,所以模型出现问题我们没有及时发现。直到模型结果影响到客户,被客户发现了。最终,不但给客户造成了极大的损失,也让客户对我们的技术能力产生了怀疑。
**第三:特征无评估、无监控。**我们说过,**一个模型的训练包含了很多特征,这些特征加上算法组合成了最终的模型,所以对于模型特征的评估就很重要了**
在此次事故中,算法同学没有评估这个特征稳定性就贸然引入了它,而且,它在模型中还占有很高的比重,这就导致模型对该特征依赖性过强。再加上模型上线后,算法同学没有对模型的特征数据进行监控,所以这些特征数据出现问题以后,整个模型都失效了。
## 流程优化:增加模型宣讲和模型评估节点
通过刚才的复盘,我想你可以看到,整个过程中产品经理是缺位的。产品经理对于算法同学训练的模型没有能力评估,算法同学说什么就是什么,根本无法把控产品的质量。最后的结果就是产品经理变成了传话筒,交付的产品也不可控,最终就给这次事故埋下了隐患。
因此,模型的评估是我们必须要做的事情,但是该怎么做呢?接下来,我带你看看我当时是怎么做的,然后帮助你梳理出一个完整的流程,希望你能把这些经验好好利用起来。
### 第一步:改流程,增加单独的模型宣讲和评估节点
我先修改了原有流程,增加了模型宣讲和评估的节点。原来的流程是,算法同学完成模型训练之后,由工程同学进行模型的上线,之后测试同学介入测试,产品经理再做最后的验收,整个流程都和传统互联网产品的上线流程一致。
这样做看似没有问题,但是会存在两个弊端。
**第一,模型问题发现时间太晚。**如果模型构建完成之后不进行评估而是等工程上线之后测试或者验收阶段才发现模型有问题就太晚了。这个时候我们再去调整模型大概率会影响产品上线时间。毕竟大多数时候模型的调整比研发修复Bug要麻烦得多。
**第二,容易导致评估范围不完整。**产品上线之后验收,大家很自然就会更加关注业务指标,容易忽略模型本身的指标,比如在上面的例子中,我们只关注模型性能表现但没有去评估模型特征的稳定性,特征一旦失效就让整个产品出现了问题。
针对这两个问题,我的解决办法是:**制定新的流程,在模型构建完成之后,必须要经过模型宣讲和模型验收两个环节,只有模型验收通过之后,才可以进行后续的工程上线工作。**
下面,我再具体说一说这样改造流程的目的。
首先,我为什么要增加模型宣讲环节?这是因为,模型本身是一个偏黑盒的产物,它不像一般的互联网产品,有页面、有结果,产品经理可以通过页面功能去评估工程师的产出是否满足需求。所以,要由算法同学先给产品经理讲解清楚模型的加工逻辑,这样产品经理才可以进行后续的验收评估工作。
其次,为什么单独增加模型验收环节?这是因为,在模型构建完成之后立刻进行验收,有助于提早发现问题,以免影响最后的产品上线。
### 第二步:定标准,定义评估节点内容和交付物
流程调整之后,我又和算法同学一起讨论了模型宣讲和模型评估两个环节的人员分工和交付物,确定了我们在这两个节点上的工作标准。
**1.模型宣讲环节的工作内容和交付物**
首先,在模型宣讲前,算法同学需要给产品经理提供一份模型报告。报告中需要包括模型设计、算法选型、特征筛选,验证结果等内容。产品经理看过模型报告之后,再组织算法同学进行模型宣讲。
其次,在模型宣讲中,产品经理要有目的地去了解算法逻辑。在这个过程中,我会要求算法同学帮忙说明,这个模型使用了什么算法和选择这个算法的原因,这个模型选择了哪些重要特征,训练的样本,以及算法同学的测试方案与结果。
具体来说就是产品经理需要根据算法同学提供的模型报告对AI产品影响比较大或者是模型同学容易忽略的三个点进行评估它们分别是重要特征的来源、训练样本的合理性以及测试结果是否符合业务预期、是否合理。
那为什么要对这三点进行评估呢?我在下面总结了一张表格,你可以先去看看。至于评估的具体方法我会在模型评估环节来讲。
<img src="https://static001.geekbang.org/resource/image/8e/20/8e02076b3c4f15b48e19263be08a2220.jpeg" alt="">
**总的来说,模型宣讲环节相当于是产品经理给模型上线设立的第一道门槛。针对算法同学给到的模型报告,我们要弄清楚它的算法方案,同时,借助对上面这三点的粗略评估,判断模型的特征、样本、测试方案和结果是否合理。**通过这次评估之后,我们就可以把模型报告归档,进入到模型评估环节了。
**2.模型评估环节的工作内容和交付物**
在模型评估环节,产品经理需要做的是,根据业务需求挑选合适的测试样本,请算法同学进行测试,并且提交测试结果。最后,再根据模型宣讲和测试的内容编写模型验收报告。
我在下面给出了一个模型验收报告的例子,虽然,不同业务场景下的评估内容可能不同,但你完全可以进行参考。
**我们的模型验收报告主要有三个部分,分别是重要特征,选择的测试样本,具体的模型性能和稳定性的测试结果。选择体现这三个部分是因为,它们对我们模型稳定性的影响比较大,有时候会直接影响我们的业务指标。**
这个时候,有的同学可能会问,“老师,这三个部分是不是已经包含了模型宣讲环节的评估呀?既然已经评估过了,为什么又要重新评估呢?”这是因为,宣讲环节的评估只是初步评估,让产品经理粗略地了解模型的结果能不能满足业务的诉求。到了这个环节,产品经理要站在业务的角度,更详细地对模型进行评估。
我们先来看重要特征部分。模型是由特征组成的,所以评估特征是必不可少的环节。在这个部分,我们需要列出重要特征,评估这些特征的选择是否合理。然后,我们要对每个特征的来源和特征意义进行合理性的评估。
针对特征来源,我们要考虑这个特征是外部接入的数据产生的特征,还是我们内部业务数据产生的特征,对于外部数据我们更需要关注数据的稳定性和可持续性。
针对特征意义我们要考虑的是这个特征的含义是否符合业务或者常理。比如我们要用到夜间购物特征但是这个特征时间点设置为23点到2点就不合理一般应该设置成是0点到5点。
接下来是测试样本部分。因为同样的模型选择不同的测试样本,得到的结果就会完全不同,所以我们应该选择和实际业务场景相近的样本进行测试。
同时在模型验收报告中我们必须把选择的测试样本是哪些以及为什么选择这些样本都一一说明。比如在测试用户信用评分模型时候我选择的样本是2019年10月到2020年4月的消费金融用户。原因是本模型主要面向消费金融客群产品为按月分期。这个时间段这个客群已经有了信贷表现所以我选择它们作为测试样本。
最后,也是最关键的,我们要去评估模型的性能和稳定性。模型性能直接和业务目标相关,如果模型性能达不到业务需要的标准,那么模型根本不具备上线条件。同时,模型稳定性也和业务需求直接相关,我们的业务场景就要求模型必须稳定的(PSI&lt;0.2)。
具体来说,我们会分为四步去评估:
- 评估重要特征的性能测试结果是否符合预期,包括特征 IV、KS 等等;
- 评估重要特征的稳定性一般是PSI值
- 评估模型性能测试结果是否符合预期,包括模型 KS、AUC、MSE 等等;
- 评估模型稳定性测试结果一般也是PSI值。
以上就是我们模型验收报告中需要包括的内容了。不过这些内容需要根据实际业务情况进行调整如果算法模型是一个回归模型那么性能测试报告中就不需要包括KS、AUC这些指标。
说了这么多,我再带你总结一下,模型评估环节的验收报告中必须要体现的内容,如下表所示:
<img src="https://static001.geekbang.org/resource/image/f6/f2/f6bdb73e9bf45yybfb511116050741f2.jpeg" alt="">
模型验收通过之后,就可以进入工程联调、上线和测试环节了。这和之前的流程一致,我就不再多说了。
## 总结
今天,我通过一个因为产品没有验收就匆忙上线而出现的事故,为你讲解了产品经理在模型评估上面的重要性以及我们的模型验收流程是怎么样的。希望你能根据我总结出来的验收流程,结合你的业务情况,形成你自己的验收方案。
为了帮助你形象地理解,我梳理了一张验收流程图,放在了下面。
<img src="https://static001.geekbang.org/resource/image/73/92/730ae4fcd5f1c8f5fe0932fe99dfb092.jpg" alt="">
了解了验收的流程,只是我们模型评估的第一步,但是具体到模型验收环节,产品经理要根据什么指标进行验收,你肯定还充满了疑问,这些内容我会在下节课和你详细讲解。
另外,在这次事故之后,我除了调整产品的上线流程之外,还组织搭建了模型监控系统。具体该如何搭建这个监控系统,监控系统需要观测哪些指标,我也会在后面和你分享。
## 课后讨论
我想听听你在做产品经理时候,遇到过哪些坑,你是怎么解决的。现在回过头再看,你会不会有更好的解决方式呢?
期待在留言区看到你的分享,我们下节课再见!

View File

@@ -0,0 +1,103 @@
<audio id="audio" title="18 | 核心技能:产品经理评估模型需要关注哪些指标?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/40/44/4036461d3b9c5616b5e801239d415744.mp3"></audio>
你好,我是海丰。今天我们开始模型评估指标的学习。
整个AI项目的落地过程中都有着模型评估指标的身影。在模型设计阶段AI产品经理在编写需求的时候除了需要写清楚产品的业务指标也要说明通过模型来解决什么样的问题模型应该达到的标准是什么算法工程师会根据这个标准进行模型开发。开发完成之后AI产品经理还需要对模型的结果进行验收来决定模型是否可以上线。
但是一些刚刚转行AI产品经理岗位的同学因为没有做过AI项目不懂算法根本搞不清楚模型都有哪些评估指标更别说这些指标的区别了。
因此,我会花五节课来和你讲解模型评估的所有指标:第一节课,我会从全局的角度给你讲模型评估的指标都有什么;后三节课,我会重点给你讲解模型的性能指标,让你知道它们是怎么计算的;最后一节课,我们会详细讲解模型的稳定性指标。希望能帮助你全面且深入地掌握这些知识。
话不多说,我们正式进入今天的课程,首先来看看模型评估的分类。
## 模型评估的分类
模型评估可以分为离线评估和在线评估两大类,在产品的不同阶段,我们要根据场景的不同分别应用它们。
其中,**在线评估**是指在模型部署上线后,使用线上真实数据对模型进行的评估。这个时候,产品经理或者运营同学大多采用 ABTest 的方式去判断业务的表现。
比如,原来我们给用户推荐的商品没有经过模型匹配而是通过策略产出的。上线推荐模型之后,我们通过 ABTest先导入一部分流量到模型匹配后的商品页面让一部分用户看到原来的页面让另一部分用户中的每个人都看到不一样的商品页面。通过一段时间如 1 天或 1 周)的观察,如果另一部分用户的点击率或者 购买转化率有提升,我们再决定让这个模型正式上线。
**离线评估**是指在模型部署上线前对模型进行的验证和评估工作,这个时候如果发现问题,我们可以很方便地对模型的参数进行调整和改进。这也就是我和你讲的,需要在模型上线之前进行的模型验收部分的工作。
两种评估方式由于其场景不同所评估的关注点也不尽相同。其中离线评估关注的是模型效果相关的指标如精准率、KS 等等。在线评估关注的是业务相关指标,比如新用户的转化率、优惠券的核销率、信贷审核的通过率等等。由于模型的在线评估与业务场景强相关,所以我们的课程重点将放在模型的离线评估上。
离线评估又可以分为特征评估和模型评估两大类,接下来,我们先来看模型特征的评估。
## 模型特征的评估
很多人会认为,模型评估就只评估模型最终的结果,比如召回率这些指标。但作为一个产品经理,我们不能只看模型这个黑盒子的最终结果,同时也要了解这个黑盒子里面的内容,所以,模型特征的评估也是要做的。
当然,我们不会检验全部的特征,只会去评估模型中重要性比较高的特征。都有哪些特征的重要性比较高呢?这需要算法同学在宣讲时同步给我们。
知道了重要特征有哪些,接下来就是对它们进行评估了。我们一般会对特征自身的稳定性,特征来源的稳定性,以及特征获取的成本进行评估,这都是业务比较关注,并且也是很容易出问题的地方。
**首先对于特征自身的稳定性我们会使用PSI这个指标来判断。** PSI是指评估某个特征的数据随着时间推移发生变化而不再稳定的指标。简单来说就是看这个特征是不是稳定的一个指标。如果一个重要特征不够稳定就会影响模型整体的稳定性自然也会影响前端业务。
**其次,对于特征来源的稳定性,我们主要看特征是从哪里接入的。**比如,上节课我提到的那次事故,就是因为我们将外接的一个数据源作为了模型的重要特征,它出了问题,整个模型就失效了。所以作为产品经理,你一定要关注特征来源的情况,因为这一点往往是算法工程师容易忽略的。
总的来说针对特征来源稳定性的评估我认为可以分为这样2种情况
1. 如果特征是从集团内部接入的,我们要看它是从哪条业务线获取的,这个业务的稳定性如何,业务方是否有可能收回或者停止共享业务数据;
1. 如果特征接入方是外部公司,我们还要看这个公司是否合规,是否具备完善的技术储备等等。
针对这两种情况,**特征接入的成本也不一样**。
第一种,我们使用的特征是公司的内部数据。一般来说,使用公司内部数据是不存在成本的,但如果这些数据来自不同的业务线,在集团内部也会存在成本分摊或者业务数据单独计费的情况。比如,我们部门在做推荐系统时候,要用到某个部门的用户画像数据,这个部门就会记录我们调用的次数,到年底的时候和我们进行成本分摊。
第二种,我们使用的特征数据是从其他公司采购的,就会产生数据使用的费用,正常支付就可以了。比如,我们在做用户信用评估时候,不止使用内部数据也会采购其他公司的用户信用评分、多头借贷、欺诈指数等数据。
不过,模型特征的评估到这里还没有结束,出于对业务成本的控制,产品经理还要对这些付费特征做进一步评估:它们给模型带来的增益是否可以覆盖掉它们的成本,以及能否通过数据缓存来减少模型对它们的调用。
举个例子,我们之前有一个模型使用了运营商的数据,运营商按照调用次数计费,数据是按月更新的。所以,我们在给模型提供这个数据接口的时候直接在工程侧做了数据缓存,保证在一个月内,同样的数据我们只获取一次,这样就能有效减少数据使用的成本。
## 模型的评估
看完了特征的评估,接下来就是我们的重头戏:模型的评估。模型的评估主要包括三个部分:统计性、模型性能和模型稳定性。
### 统计性指标
统计性指标指的就是**模型输出结果的覆盖度、最大值、最小值、人群分布等指标。**我们拿到一个模型,最先看的不是性能指标也不是稳定性,而是统计性指标,它决定了模型到底能不能用。
以模型覆盖度为例,它表示模型可以覆盖人群的百分比,它的计算公式是:**模型的覆盖度=模型可以打分的人数/需要模型打分的人数。覆盖度越高,代表模型可以打分的人数越多,也就是说模型可以评估更多人。如果模型覆盖度过低,即使它的性能表现很好,在某些业务场景下模型也不可用。**
比如说在金融风控场景下如果一个模型覆盖度低于60%,基本就很难给到客户使用了,因为覆盖度太低,风控的业务人员基本没办法对这个模型应用到决策引擎中。如果非要用的话,最好的情况也就是用到决策树的某个分支上,专门作用于某一小部分人群,实际调用量会很小。
除了覆盖度我们还要看模型输出结果的最大值和最小值设置得是不是合理也就是分数范围。我们还是以信用评分模型为例假设京小白的信用分范围是0-110。这样的分数范围设计得就不是很合理因为信用评分模型覆盖的人数非常多如果模型输出的分数范围太窄就会导致一个分数点集中很多人人群没有得到很好的区分。那多少是合理的呢我们可以参考芝麻分的范围350-950。
最后,我们还要看模型的人群分布,它指的是模型对人打分后,分数和人群的分布形态,这个分布形态应该符合我们的常识,比如,用户消费能力评估模型对于人群的打分结果就应该符合正态分布。
<img src="https://static001.geekbang.org/resource/image/ab/99/abde1e426889fc4b8da6cc115858c099.jpeg" alt="">
**总的来说,在不同场景下,由于我们的业务目标不同,对模型的要求不同,对模型统计性指标的关注点也不会相同。**比如说,在金融风控这类场景中,因为我们需要对每一个用户进行评价,所以需要重点关注覆盖度这个指标,但是在用户精细化运营这样的场景中,我们只需要挑选出部分用户,那覆盖度指标我们又不需要重点关注了。**因此,对统计性指标进行评估的时候,我们要充分考虑业务场景。**
### 模型性能和稳定性评估
模型的性能评估指标就是评估模型效果的指标,它和模型要解决的问题相关,模型要解决的问题可以分成分类问题和回归问题。由此,我们可以把模型分成分类模型和回归模型。接下来,我们就详细说说,针对不同的模型可以使用哪些典型的性能指标。
我们说过,分类模型包括二分类模型和多分类模型。其中,二分类模型在实际业务中使用比较多,比如,它经常用于判断用户的性别、用户的购买偏好、支付宝的芝麻分、京东的小白信用、微信的支付分等问题。
**分类模型的性能评价指标主要包括混淆矩阵、KS、AUC 等等。**通过混淆矩阵我们既可以得到一个模型的精确率、召回率这些指标从而可以评估一个模型的区分能力我们也可以计算得到的TPR、FPR从而计算出AUC、KS等相关指标。因此混淆矩阵是评估二分类模型的基础工具。
**回归模型的性能评价指标主要包括MAE平均绝对误差、MSE均方误差、RMSE均方根误差、R 方等等。**它常用来预测数值,比如房价和股价的预测就是典型的回归模型应用。
**最后,模型的稳定性即判断模型输出结果,是否会随着时间推移,而发生较大变化不再稳定的指标,模型的稳定性会直接影响模型的结果。**比如在风控场景下如果风控模型不够稳定对于用户风险判断的结果就会发生较大变化。这个时候我们需要实时调整风控策略同时也要注意调整后造成决策不合理的情况。对于模型的稳定性我们主要使用PSI进行评估。
到这儿,模型评估的内容我们也讲完了。最后,我还想补充一句,今天,我们只需要知道这些指标的具体分类,以及不同模型对应的指标是什么就可以了。至于这些指标的具体含义、应用,以及具体计算方式,我会在后面的课程详细来讲。
## 小结
业务场景是决定模型性能最关键的因素,所以我们要根据实际的业务需求,来选择合适的评估指标。我把评估指标和对应的场景总结在了一张脑图中,这里,我们重点记忆离线评估的指标就可以了。
<img src="https://static001.geekbang.org/resource/image/8e/c4/8ee39a46797b3552ayy802455e9b65c4.jpg" alt="">
为了帮助你理解今天的内容我还总结了2个特定的场景。
1. 如果一个二分类预测模型的目标是预测一个人是好人还是坏人。基于不要错怪好人的原则,我们就会希望模型的准确率很高。不过,如果模型的召回率低一些(坏人在总人数中的比例),我们也是可以接受的。
1. 在一个用户营销发券的场景下,如果业务的目标就是给用户发送优惠券,并不在意拿到优惠券的用户是否会消费,那么我们就希望模型的召回率高一些,准确率可以适当降低。
## 课后讨论
假设,你们公司是做电商业务的,现在领导打算让你做流失用户的召回,你认为评估这个模型的指标都有哪些?为什么?
欢迎把答案写到留言区和我一起讨论,我们下节课见!

View File

@@ -0,0 +1,112 @@
<audio id="audio" title="19 | 模型性能评估(一):从信用评分产品看什么是混淆矩阵?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/b6/a1/b687b54c2728dyyb02cbf89cd0b7c2a1.mp3"></audio>
你好,我是海丰。
这节课,我们来学习分类模型的评估指标。上节课我们说了,分类模型的性能评估指标有混淆矩阵、$KS、AUC$等等。混淆矩阵是其中最基础的性能评估指标,通过它,我们可以直观地看出二分类模型预测准确和不准确的结果具体有多少,而且像是$KS、AUC$这些高阶的评估指标也都来自于混淆矩阵。
比如说,对信用评分这样典型的分类问题进行评估,其实就是要知道一个人信用的好坏。通过混淆矩阵,我们就能知道这个信用评分能够找到多少坏人(召回率),以及找到的坏人中有多少是真的坏人(精确率)。
因此,要对分类模型的性能进行评估,我们一定要掌握混淆矩阵。接下来,我们就通过一个信用评分产品的例子来详细说一说,混淆矩阵是什么,以及相关指标的计算方法。
## 什么是混淆矩阵?
信用评分的产品指的是利用客户提交的资料和系统中留存的客户信息,通过模型来评估用户信用情况的模型。信用评分主要应用于信贷场景中,对用户和中小企业进行信用风险评估。
假设,你的算法团队做了一个信用评分产品,分数范围是 [0, 100]。同时算法团队给出一个参考阈值60分以下的人逾期概率远高于 60 分以上的人群。
这个时候,你可以抽取一部分用户用于验证模型的效果。但是,这些用户必须是已经具有信贷表现的,否则我们无法通过它们确定模型有效性。我们把从来没有逾期的用户定义为“好人”,逾期用户定义为“坏人”。
假设我们抽取了 100 个测试用户,向信用评分模型中输入这一百个测试用户的信贷信息(用户身份证号/手机号码以后我们能得到100个模型的预测结果以及每个用户的评分。结合算法团队给出的参考阈值我们把信用分小于等于 60 的人定义为“坏人”,大于 60 的人定义为“好人”。
这之后,我们就可以通过混淆矩阵,知道模型预测结果和实际结果的差距,从而判断模型性能的好坏了。
混淆矩阵有两个定义分别是Positive和Negative它们分别代表模型结果的好和坏。下表就是一个标准的混淆矩阵。其中行表示真实值列表示预测值。$T$代表模型预测对了,也就是预测值和实际值一样,$F$则相反。$P$就是Positive的缩写我们可以理解为“坏人”$N$就是Negative的缩写我们可以理解为好人。这里要特殊说明一下好人坏人的定义是为了方便我们理解的一般教材上会说明Positive为正例Negative为负例。
<img src="https://static001.geekbang.org/resource/image/6a/42/6abc7fbyyd2d83d5fccbd78f49872542.jpeg" alt="">
由此我们可以总结出4种情况
- $TP$是指模型预测这个人是坏人,实际上这个人是坏人,模型预测正确;
- $FP$是指模型预测这个人是坏人,实际上这个人是好人,模型预测错误;
- $FN$是指模型预测这个人是好人,实际上这个人是坏人,模型预测错误;
- $TN$是指模型预测这个人是好人,实际上这个人是好人,模型预测正确。
刚刚接触混淆矩阵的同学,可能还不能完全理解$TP、FP$代表什么。其实我们也不需要对这4种情况死记硬背只需要记住$T$和$F$代表模型判断的对和错,$P$和$N$代表模型预测结果的好和坏。
我们每预测一个人,都可以得到这样一个混淆矩阵。
比如,用户张三实际是一个逾期用户,也就是“坏人”,但模型给出的评分是 80 分。这个时候,张三的混淆矩阵中$FN=1$,就代表模型预测错误。
<img src="https://static001.geekbang.org/resource/image/3a/2d/3a306dyyc8f7440d5a26b07b5451622d.jpeg" alt="">
再比如用户李四也是一个逾期用户但模型给出的评分是40分。这个时候李四的混淆矩阵中$TP=1$,模型预测正确。
<img src="https://static001.geekbang.org/resource/image/6d/f0/6dcd6e8d5dc1388ccefdc1f12b1f4df0.jpeg" alt="">
假设这100个人里面实际有40个坏人60个好人。模型一共预测出 50 个坏人,在这 50 个坏人中,有 30 个预测对了20 个预测错了。
<img src="https://static001.geekbang.org/resource/image/07/33/07c0f05878aa0d4bf1b89747dab55933.jpeg" alt="">
综合了这 100 个人的模型结果和实际的结果,我们就能得到一个如下的混淆矩阵:
<img src="https://static001.geekbang.org/resource/image/6b/a7/6be685ddfc68f23d88259d6fe6c3e9a7.jpeg" alt="">
我们当然希望所有测试的结果都是 $TP$ 或者 $TN$,也就是模型预测每个人的结果都和实际结果是一致的。
但是,现实中不太可能存在这样的情况,而且单独看混淆矩阵,我们只能知道模型预测结果中有多少个$TP$和$FP$没办法直接告诉业务方这个模型到底好不好。因此为了能够更全面地评估模型我们又在混淆矩阵的结果上延伸出另外3个指标分别是准确率、精确率和召回率。
## 混淆矩阵的指标:准确率、精确率、召回率
**准确率Accuracy这个指标是从全局的角度判断模型正确分类的能力。对应到信用评分的产品上就是评价模型预测对的人$TP+TN$,占全部人员$TP+TN+FP+FN$的比例。** 极端情况下模型所有人都预测对了这个准确率就是100%。
准确率的计算公式是:$accuracy = \frac{TP+TN}{TP+TN+FP+FN}$。
虽然通过准确率这个指标我们可以直观评价模型正确分类的能力。但是在样本不均衡的情况下占比大的类别对评价结果的影响太大。比如说100 个用户里有 90 个坏用户,当我们模型预测到 99 个坏用户的时候,它还能有 90% 的准确率。这肯定是不对的。
在这种情况下我们还要借助精确率Precision。**精确率是判断模型识别出来的结果有多精确的指标。对应到信用评分的产品上,就是模型找到的真的坏人(对应混淆矩阵中的$TP$)的比率占模型找到的所有坏人(对应混淆矩阵中的$TP+FP$)的比率。**
精确率的计算公式是:$precision =\frac{TP}{TP+FP}$。
<img src="https://static001.geekbang.org/resource/image/a1/10/a19351c0605c689550382eef46310310.jpeg" alt="">
**除此之外我们也要看召回率。召回率Recall也叫做查全率是判断模型识别广度的指标。对应到信用评分的产品上就是模型找到的真的坏人对应混淆矩阵中的$TP$)占实际坏人$TP+FN$的比例**。也就是看模型能识别出多少真正的坏人,模型认为的坏人占实际坏人的比率是多少,公式是:$recall=\frac{TP}{TP+FN}$。
知道了模型的准确率、精确率、召回率的计算公式,我们通过刚才的混淆矩阵,就可以把它们分别计算出来了:
- 准确率 =$\frac{TP+TN}{TP+TN+FP+FN}=\frac{30+40}{30+40+20+10}=70%$
- 精确率 = $\frac{TP}{TP+FP}= \frac{30}{30+20}= 60%$
- 召回率 = $\frac{TP}{TP+FN}=\frac{30}{30+10}= 75%$
总的来说,准确率、精确率和召回率是混淆矩阵的三个基本指标。准确率可以从全局的角度描述模型预测正确的能力,精确率和召回率可以分别描述模型识别的精确度和广度。
在实际工作中,我们一般通过精确率、召回率就可以判断模型预测的好坏,因为召回率可以知道我们找到了多少想找到人,精确率可以知道,我们找到的人有多准。
不过,精确率和召回率实际上是一对矛盾的指标,精确率提升,召回率可能会随之降低。比如说,如果想要识别出来的坏人都是真的坏人,模型就很可能会因为保守而缩小自己识别的范围,这就会导致召回率的下降。
因此,我们不仅会一起来看这两个指标,也会把它们放到一起来提需求。比如说,我们会要求算法同学,在 30% 召回率下把模型的精确率提升5倍。
除此之外,还有一个指标可以综合反映精确率和召回率,它就是 $F1$ 值,$F1$ 值越高,代表模型在精确率和召回率的综合表现越好。
F1的计算公式$F1 = \frac{2 \times precision \times recall}{precision + recall}$。
不过,在实际对模型评估的时候,我们还是习惯看召回率和精确率,这两个指标给业务方去讲,也比较容易理解(不使用准确率是因为在样本偏差情况下,准确率反而不准确)。
最后,在使用这三个指标的时候,我还有几点建议:
- **准确率:理解成本最低,但不要滥用。在样本不均衡情况下,指标结果容易出现较大偏差;**
- **精确率:用于关注筛选结果是不是正确的场景,宁可没有预测出来,也不能预测错了。** 比如,在刷脸支付的场景下,我们宁可告诉用户检测不通过,也不能让另外一个人的人脸通过检测;
- **召回率:用于关注筛选结果是不是全面的场景,“宁可错杀一千,绝不放过一个”。** 比如,在信贷场景下,我要控制逾期率,所以宁可把好用户拦在外面,不让他们贷款,也不能放进来一个可能逾期的用户。毕竟,用户一旦逾期,无法收回的本金产生的损失,比我多放过几个好用户带来的收益要多很多。
## 小结
混淆矩阵是分类模型评估的基础,准确率、精确率和召回率是从混淆矩阵衍生出来的评估指标。为了帮助你记忆,我把这些指标的公式、解释和注意事项都总结在了下面的表格里,方便你对比和回顾。
<img src="https://static001.geekbang.org/resource/image/2f/d9/2fd7cc3a9b79bfb440cb73419a0c56d9.jpeg" alt="">
最后我们要记住一点在实际对分类模型性能进行评估的时候我们一般会用精确率和召回率一起使用比如在召回率20%的基础上达到精确率5%。但是,对于信用评分的模型,我们很少只用召回率和精确率这样的指标去做判断,而是用$KS、AUC$这样的指标进行判断。这些指标我们下节课会详细来讲。
## 课后讨论
刚才我们说,对于信用评分模型一般用$KS、AUC$这样的指标进行评估。你觉得,我们为什么不用准确率呢?
期待在留言区看到你的思考,我们下节课见!

View File

@@ -0,0 +1,112 @@
<audio id="audio" title="20 | 模型性能评估从信用评分产品看什么是KS、AUC" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/d6/80/d6e268e7e8a38e1c3d54aa9efd27ea80.mp3"></audio>
你好,我是海丰。
上节课我们学习了混淆矩阵以及准确率、精确率和召回率这3个基础指标的计算。这节课我们依然会借助上节课的信用评估模型来学习二分类模型中常用的两个综合性指标KS和AUC。
## 构建KS和AUC的基础TPR和FPR
首先我们来看两个基础指标TPR和FPR它们是计算KS和AUC的基础指标。
在信用评分模型中TPRTrue Positive Rate代表模型找到真坏人对应混淆矩阵中的TP占实际坏人TP+FN的比例它的计算公式为TPR=TP/(TP+FN)。一般来说,这个指标被称为:真正率、真阳率,用来评估模型正确预测的能力。不过,因为它的计算公式和召回率是一样的,所以为了方便我们也经常叫它召回率。
FPRFalse Positive Rate代表模型误伤认为是坏人实际是好人的人占总体好人的比例它的计算公式为FPR=FP/(FP+TN)。一般来说,这个指标被称为:假正率、假阳率,它用来评估模型误判的比率或者误伤的比率,为了方便我们也叫它误伤率。
那这两个指标是怎么构建KS和AUC的呢别着急我们慢慢往下看。
## ROC曲线绘制和AUC的计算
在实际工作中我们最希望的模型一定是找到的坏人足够多并且误伤的好人足够少也就是TPR尽量高、FPR尽量低。为了形象地表达它们之间的关系我们引入了ROC曲线。
那么ROC曲线具体是怎么得到呢
这里,我们先来回顾一下上节课的信用评分模型,这个模型的分数范围是[0,100]。算法团队给出的参考阈值60分我们根据它对模型进行了简单的划分得到了混淆矩阵以及相应的召回率等指标。
如果我们没有这个阈值呢实际上我们在模型分数的每一个点上都可以做这样的划分也就是把每一个分数点都当作是一个阈值这样就可以得到一连串的指标。想想都知道对所有分数进行划分会非常麻烦。虽然不能对所有分数进行划分但是我们可以对分数进行分段处理。比如说我们的打分人数有5000人我们按照每10分进行一个分段就能得到下面这张图。
<img src="https://static001.geekbang.org/resource/image/00/da/006b4yy8cb018f3849ea091c602c45da.jpeg" alt="">
结合上面的图我们可以分3种情况进行讨论。
**第一种情况是一种极端情况阈值定在0分上小于0的是坏人大于0的是好人。** 这个时候虽然0分以下没有任何人但是我们仍然可以得到相应的混淆矩阵也就可以得到对应的TPR和FPR。
这个时候的TPR是多少呢我们不需要计算根据定义思考一下就知道了。因为模型只有[0,100]没有人的打分是小于0的这也就意味着模型没有分辨出任何一个坏人所有人都是好人找坏人的能力TPR就是0。
那么FPR是多少呢同样的因为模型认为没有人是坏人所以它没有产生任何一个误伤误伤率FPR就是0。
**第二种情况也是一个极端的情况阈值定在100分小于100分都是坏人大于100分都是好人。** 这个时候模型会认为所有人都是坏人所以模型能找到所有的坏人TPR=1。同理模型把所有人都当成了坏人就相当于误伤了所有的好人所以FPR=1。
**第三种情况是正常情况阈值定在一个非0分和非100分的分数上如60分。** 那么TPR和FPR分别会得到一个在0-1范围内的值如TPR=0.8FPR=0.2。
同样的我们也可以把这个阈值分别定在10分、20分、30分这些点位上就会得到一连串的TPR和FPR。如果我们把FPR做横轴TPR做纵轴一个TPR和FPR就对应了一个点。当把这些点都连起来之后我们就可以得到如下一条蓝色的曲线
<img src="https://static001.geekbang.org/resource/image/ea/5a/ea7faff3a280bd83a7dbf5194222d35a.jpeg" alt="">
**总的来说ROC曲线就是在没有准确阈值的情况下对所有分数进行分段处理计算每一个切分点对应的TPR和FPR以FPR做横轴、TPR做纵轴绘制出的一条曲线。**
除了蓝线我们看到图中还有一条红线它是一条随机线这条随机线上的每一个切分点的FPR和FPR都是相等的。它表示模型每次切分时抓到坏人的概率和误伤好人的概率都是一样的。这和我们随机猜测的概率相同所以模型的ROC曲线越贴近这条随机线模型的分类效果就越差。甚至如果ROC曲线在随机线下面就说明模型预测结果和我们预期结果是反的而当ROC曲线越偏离随机线并且靠近左上方(0,1)点的时候说明模型分类效果越好因为这个时候模型的TPR=1FPR=0。
虽然我们通过ROC曲线可以区分模型的好坏但这还不够直观而且和业务方沟通时候我们也不能直接让他们去看这张图。
因此我们想到是不是可以把曲线右下方和横坐标轴闭合起来的面积作为一个评估指标。这个面积就是我们图上蓝色的阴影部分它就是AUC指标。一般来说AUC都在0.5到1之间AUC越高代表模型的区分能力越好。如果AUC=0.5那ROC曲线与图中红线重合表示模型没有区分能力它的结果等于随机猜测如果AUC小于0.5,说明这个模型大概率很差。
## KS的计算
现在我们知道了AUC是什么那么KS又是什么呢其实KS曲线和ROC曲线的本质和数据的来源都是一致的。只不过**ROC代表的是模型召回率和误伤率之间的变化关系KS代表的是在某一点上模型召回率最大并且误伤率最小**。
因此我们在绘制ROC曲线的时候是用召回率和误伤率来做纵轴和横轴而在绘制KS曲线的时候我们把召回率和误伤率都作为纵轴把切分的分数点作为横轴。这个时候一个切分点会同时得到TPR和FPR两个值所以我们可以画出来两条曲线。具体是怎么操作的呢
我们还是以[0,100]的模型分数范围为例每10分做一个分段如0分是一个切分点10分是一个切分点20分是一个切分点....在每一个切分点上我们都可以得到一对TPR和FPR。
对于得到的TPR和FPR我们也可以和刚才一样分三种情况讨论。
第一种情况切分点在0。这个时候模型认为没有任何人是坏人所以TPR = 0FPR也是0。因此在横坐标0这个点上我们得到了两个数值相同的点也就是图上左下角蓝色的点。
第二种情况切分点在100。这个时候TPR和FPR都是1所以得到右上角橘色的点。
第三种情况切分点非0、非100。假设我们还是以60分作为切分点也会得到一对TPR和FPR。
就这样等我们把所有切分点遍历之后就能得到所有切分点的TPR和FPR值。然后我们把它们放到坐标系中把得到的TPR和FPR的值分别连接起来就能得到两条曲线。这个坐标系的横轴就是我们对信用评分的切分点如果我们信用分是[0,100]范围那它就是从0到100的数值。
如下图所示红色线是我们在不同的切分点得到的所有TPR的曲线绿色线是相应的FPR曲线。它们在001001这两个点相交。
<img src="https://static001.geekbang.org/resource/image/ff/8e/ff8d60a16e075809a759a955e4747b8e.jpeg" alt="">
**由于KS代表的是在某一点上模型召回率最大同时误伤率最小所以KS就是图中红色线和绿色线间隔最大时候的距离。**
如图TPR和FPR在切分点为40的时候距离最大这就意味着当我们拒绝给40分以下的人进行贷款同时通过40分以上的人的信贷请求时业务的收益最大。这是因为我们拒绝了足够多的坏人同时误伤了足够少的好人。那么KS就是在这个点上TPR-FPR的数值了。
具体到图中KS = 0.7- 0.1=0.6所以我们这个模型的KS就是0.6。在实际业务中也有人会说“我们KS是60”这也是正常的。
那么对于信用评分产品来说KS指标是多少才合适呢对于用于贷前审批的信用评分申请评分卡模型来说一般业内会分为4种情况
- KS&lt;20欠拟合模型基本不具备可用性
- KS&gt;20&amp;KS&lt;30模型可用
- KS&gt;30&amp;KS&lt;40模型预测能力优秀
- KS&gt;40模型的区分度很高。但同时我们也要对这个结果持怀疑态度进一步去分析入模变量中是否有一些滞后变量来确认结果的准确性
总的来说如果模型的KS或者AUC值很高不一定是一件好事情。我们需要了解背后的原因这有可能是数据不准确导致的。比如在贷前信用评分场景下KS值大于50或者AUC大于80时我们就需要注意一下数据的准确性了。
## 小结
这节课我们讲了分类模型评估的进阶指标KS和AUC它们是我们在模型评估中用得比较多的指标。围绕它们的构建我们又讲了TPR、FPR和ROC曲线为了方便你记忆和对比我把它们的核心概念、公式适用场景都总结在了下面的表格中你可以看看。
<img src="https://static001.geekbang.org/resource/image/ca/2e/ca30edacf5ec38201yy01197ef3e212e.jpeg" alt="">
这两节课我们以一个信用评估模型的例子讲完了分类模型的评估。总的来说不同类型和不同公司的AI产品经理需要掌握的评估能力可能不同。
比如说应用层的AI产品经理可能只需要知道召回率、精确率这些就可以了。但是B端做金融风控模型的产品经理就需要知道KS是什么它是怎么来的甚至要学会看不同测试集下面的KS是否合理。
就像我之前遇到一个情况OOT测试的KS是40测试集的KS是39训练集的KS是35。虽然我们用的都是真实数据但结果依然不合理如果我把这样的结果交付给客户客户不只会质疑我的专业程度更有可能怀疑我们公司的技术能力。
因此我们只有确定好自己要努力的目标才能知道这些内容自己要掌握哪些掌握到什么程度比如做互联网应用的产品经理一般掌握召回率、准确率、AUC 这些指标就可以完成大部分的工作了。当然如果你想全面系统化地学习AI技术那么尽可能地拓展自己的知识面总没有错。
## 课后讨论
在这里我想请你尝试手动计算一下KS值。虽然实际工作中我们不需要手工计算但是我希望你可以通过本次课后题加深对KS的理解。
下面是我们一个信用评分产品的测试数据我已经将分数做好了分箱我这里使用了等频分箱并且得到了好、坏用户的数量goods,bads请你计算这个产品的KS值是多少。
<img src="https://static001.geekbang.org/resource/image/29/57/2949b315b69517ffdce9c0f14a7ea157.jpeg" alt="">
期待在留言区看到你的分享和答案,我们下节课见!

View File

@@ -0,0 +1,109 @@
<audio id="audio" title="21 | 模型性能评估(三):从股价预测产品看回归算法常用的评估指标" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/3f/ce/3f2d775e02fe47be407a20bb781278ce.mp3"></audio>
你好,我是海丰。今天,我们借助一个股价预测产品,来学习回归算法常用的性能评估指标。
股票价格预测模型或者说算法不仅是金融界一项重要的研究课题,也经常和我们的直接经济利益相关,因此一直备受关注。
为了能够准确预测股票未来的价格,很多公司和机构不断尝试开发了很多股票价格预测的模型。但是,对于用算法来进行股票价格的预测这件事情,市场上有两种不同的声音:有的人认为算法是可以预测股票的,并且用 LSTM 算法进行了很多验证;有的人认为股票走势是随机游走的,不论用什么模型预测结果都不可能准确。
不过,这节课,我可不打算和你深入讨论股票预测是否可以用算法实现。我们只会对股票预测模型的结果进行评估,让你知道回归模型的性能评估该用什么指标,以及具体怎么做。
回归算法的评估和分类算法的评估在底层逻辑上是一致的,**都是为了找到真实标签和预测值之间的差异。只是对于分类算法来说,我们关注的是预测分类和实际分类是否相同,而对于回归算法来说,我们关注的是模型是否预测到了正确的数值。** 比如,我们预测一只股票 10 天后的价格是 10 元,在对模型进行评估的时候,你只要看 10 天后的价格和预测价格是否一致就可以了,如果不一致,再看差异有多大。
在回归算法中,常见的性能评估指标主要有 4 个,分别是 MSEMean Squared Error均方误差、RMSERoot-mean-squared Error均方根误差、MAEMean Absolute Error平均绝对误差 和 $R^2$R Squared 决定系数)。
下面,我们就借助一个预测股票的产品,来详细说说它们的原理、计算方法,以及它们是怎么对模型进行性能评估的。
## 如何计算MSE、RMSE、MAE
对于预测未来某一天的股票价格来说,我们能想到的最简单的方法,就是用过去一段时间它的平均价格进行预测。
假设,我们用过去 60 天的股票均价来预测这只股票第2天的价格。比如说我们就用 y=1.5*x这个最简单的算法模型进行预测那 x 就是过去 60 天的均价y 是我们预测的第二天的股价。这里我要补充说明一点因为模型预测第2天的价格比预测第20天的价格更简单为了方便理解我们就用第2天举例了。
那怎么验证模型的准确性呢我们选择三只股票记录下它们过去60天的均价以及模型预测的股价等到第2天股票价格出来之后我们再把它们和实际的股价放在一个表格中进行对比如下图
<img src="https://static001.geekbang.org/resource/image/0a/5e/0a9d16cce9612212086f9cbdb2f7765e.jpeg" alt="">
为了表示它们之间的关系,我们建立一个坐标系,以过去 60 天股票均价作为X轴以股票价格作为y轴。当我们把这三组数据放入坐标系后每一个X会同时对应一个预测股价和一个实际股价它们关系如下图所示
<img src="https://static001.geekbang.org/resource/image/76/f0/7630eeb5b8383a5b8fyy710497db89f0.jpeg" alt="">
这也就是说模型每一次预测之后我们都会得到一个真实值和预测值之间的误差也就是同一个X值的情况下蓝色点和橘色点之间的差值。那么是不是我们把得到的是所有误差相加就可以知道这个模型预测准确情况了
这个问题你可以先自己想一想。下面,我们直接动手来计算一下。根据刚才得到的数据,我们可以直接计算出这三只股票预测值和实际值之间的差值,分别 $22-12=10$$40-24=16$ 和 $26-36=-10$。
这个时候,如果我们直接把这三次的误差相加,正误差和负误差就会相互抵消。为了避免正负抵消的问题,我们会对每次得到的误差求平方再相加,三次测试的误差平方和就是: $(22-12)^{2}+(40-24)^{2}+(26-36)^{2}= 456$。
但是直接用这个数据也是不合理的。因为我们发现,只要测试样本少,即使模型的性能不是非常好,这个数值也不会太大。而且,随着样本的不断增加,即使模型的性能比较好,预测也很准确,这个数值也一定会越来越大。这对测试样本多的模型来说就非常不公平了,那我们该怎么办呢?
这个问题很好解决,我们可以求出所有测试差值的平方和,再让它除以测试样本的数量,公式为:$\frac{(22-12)^{2}+(40-24)^{2}+(26-36)^{2}}{3}= 152$。
这就是我们用来表示当前模型性能的一个评估指标——MSE它的公式如下
$$<br>
MSE=\frac{1}{n} \sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}<br>
$$
其中,$n$ 代表测试样本数量,$y_i$ 代表实际值,$\hat{y}_{i}$代表预测值。简单来说,这个指标的计算过程就是先求出所有样本真实值和预测值的差值平方,再除以样本数量。
根据这个公式的逻辑我们可以知道MSE一定是一个大于等于 0并且无穷大的数值。在对模型进行评估的时候这个值应该是越小越好。
但是这里还有一个问题我们在对差值取平方的时候经常会导致差值的量纲发生变化。比如说差值的单位是米那我们对差值取平方就会导致差值的量纲变成平方米。因此为了保证量纲相同我们可以在MSE的基础上再对它求一个平方根。这其实就是RMSE它的计算公式是$RMSE = \sqrt{MSE}$。
我们知道对差值求平方是MSE为了防止正负差异抵消而进行的操作。事实上要想保证每个样本的差值都是正数除了求平方之外我们还可以求每个差值的绝对值。这就是MAE了它和MSE一样也可以用来测量预测误差它的公式如下
$$<br>
MAE=\frac{1}{n} \sum_{i=1}^{n}\left|y_{i}-\hat{y}_{i}\right|<br>
$$
那么,在实际工作中,这三个指标我们该如何选择呢?**总的来说算法工程师看得更多的是MSE因为MSE对差值取了平方有一个数据放大的过程更容易发现误差。但是在实际效果评估时候我们更多地使用MAE相对MSE来说MAE更接近真实误差。**
**除此之外RMSE因为经过了平方再开方的过程会导致误差在一定程度上被放大所以RMSE和MAE的虽然量纲相同但是同一个模型的RMSE会比MAE要大一些。因此如果你希望更清楚地知道模型差异就选择RMSE如果你想了解更真实的模型误差就选择MAE。**
## 如何计算 $R^2$
刚才这 3 个指标的范围都是 0 到正无穷,它们的数值越小代表模型效果越好。但是,当我们想要用一个模型来预测不同场景问题的时候,就会存在不同的预测场景有不同的取值范围。比如,预测股票价格的取值范围就是从几元到几百元;预测房价的取值范围就是几十万到几千万元,而预测身高就又变成了 1 到 2 米左右的数值,可读性非常差。
我们想到分类算法评估标准的准确率都是0~1 之间的概率值,非常直观,那么回归模型有没有这样的衡量标准呢?这个时候,我们就可以用 $R^2$来进行评估。
$R^2$的计算公式是为$R^{2} = \frac{(TSS - RSS)}{TSS}$。其中TSS 代表总离差平方和RSS 代表残差平方和。从公式来看它的分子是模型的预测误差分母是平均数所以它的值一般都在0-1的范围内并且它越靠近1说明模型预测得越准确。
那么 $R^2$具体怎么计算呢?接下来,我就借助刚才股票预测的数据,来试着计算一下。
<img src="https://static001.geekbang.org/resource/image/76/f0/7630eeb5b8383a5b8fyy710497db89f0.jpeg" alt="">
在这个例子中TSS 就等于每个样本点实际值和实际值均值之间的差值平方和RSS 就等于每个样本点实际值和预测值之间的差值平方和。具体的计算过程可以分成 4 步:
1. 求出实际值的均值:$\frac{22+40+26}{3} = 29.3$
1. 求出每个实际值和实际值均值之间的差值平方和 TSS$TSS = 22-29.3^{2}+40-29.3^{2}+26-29.3^{2}$
1. 求出每个实际值和预测值之间的差值平方和 $RSSRSS = 22-12^{2}+40-24^{2}+26-36^{2}$
1. 把 TSS 和 RSS 带入 $R^2$ 公式:$R^{2} = \frac{(TSS - RSS)}{TSS}$
## 小结
这节课我们讲了回归模型中4个非常重要的评估指标。
<li>
均方误差 MSE它的应用最广泛用来判断预测值和实际值之间误差的指标。它的范围是0到正无穷数值越小代表模型性能越好。
</li>
<li>
均方根误差 RMSE它是由MSE 开根号得到的也是用来判断预测值和实际值之间误差的指标。它的范围也是0到正无穷数值越小代表模型性能越好。
</li>
<li>
平均绝对误差 MAE它的计算过程和 MSE 类似,但是它不对差值求平方,而是直接取绝对值。同样的,它的数值越小代表模型性能越好。
</li>
<li>
决定系数 $R^2$它是实际结果与模型构建的预测值之间的相关系数的平方决定系数值越高代表模型效果越好它的范围一般为0到1。
</li>
在使用这几个指标的时候,我们可以参考这 3 点:
1. MAE相对于MSE来说更接近真实误差所以在评估模型性能的时候我们会优先选择MAE
1. 想要更清楚地知道模型误差就选择MSE想要知道更真实的模型误差就选择MAE
1. 当我们想要用一个模型来解决不同问题的时候,选择$R^2$可以横向比较这个模型在哪个问题上表现更好。
## 思考题:
我们今天说了, $R^2$的范围一般是0到1但也可能是负值。那你觉得在哪些情况下 $R^2$会是负值?为什么呢?
期待在留言区看到你的思考和答案,我们下节课见!

View File

@@ -0,0 +1,115 @@
<audio id="audio" title="22 | 模型稳定性评估如何用PSI来评估信用评分产品的稳定性" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/19/59/1975c8ffed1494553706320631c3b059.mp3"></audio>
你好,我是海丰。
模型稳定性指的是模型性能的稳定程度只有稳定性足够好的模型才能通过上线前的评估而且上线后我们也要对模型稳定性进行观测判断模型是否需要迭代。在实际工作中我们会用PSI来评估模型的稳定性。
这节课我们就借助一个信用评分的产品来详细说一说PSI是什么它该怎么计算以及它的评估标准。
## 案例:客群变化对模型稳定性的影响
在金融风控领域,稳定性对于风控模型来说就是压倒一切的条件。模型只有足够稳定,才能既通过上线前层层的验证和审批,又能在上线后运行足够长的时间。但在实际工作中,像客群变化这类无法避免的情况,往往会直接影响模型的稳定性。
比如说在模型上线时候前端流量有5000的测试用户模型输出的分布可能是下面这样的。如果业务设置阈值为 60 分那么60 分以下的人我们会拒绝放款。这样一来,模型会拒绝掉大概 20%的人,这种情况对于业务来说是可以接受的。
<img src="https://static001.geekbang.org/resource/image/ee/10/eeeeb7ec08e77b1429a66b655765f010.jpeg" alt="">
如果模型上线后,前端流量没有发生变化,还是 5000 个待测用户,但是客群发生了变化,从测试用户变成了线上的用户。这个时候,模型输出的分布就会变成下面这样。
<img src="https://static001.geekbang.org/resource/image/88/c5/88e92dc914694a2bf1946120b74917c5.jpeg" alt="">
如果我们还是用 60 作为阈值,模型就会拒绝掉 50% 的用户。当前市场下,前端流量这么贵,如果风控拒绝了 50% 的用户申请,估计市场或者运营的同学,肯定不会放过风控部门了。
**在实际工作中,这种情况的发生就是因为模型不稳定。为了避免这种情况的发生,我们必须要在上线前对模型的稳定性进行评估,尤其是在类似金融风控这类对模型稳定性要求高的场景中。**
那么在上线前我们该怎么使用PSI对模型稳定性进行评估呢
## PSI指标该如何计算
首先我们来看看PSI是什么。
所谓 PSI 指标就是群体稳定性指数Population Stability Index**通过 PSI 指标,我们可以得到不同样本(不同时间段给到模型的样本)下,模型在各分数段分布的稳定性**。
### PSI的计算公式
我们知道,稳定性是一个相对的概念,只有通过对比,我们才能知道模型是不是稳定。所以,想要计算模型的稳定性,我们需要先有一个参照物。在信用评分模型中,为了进行对比,我们至少需要两个分布结果,一个是预期分布结果一个是实际分布结果。
<img src="https://static001.geekbang.org/resource/image/c5/9d/c560d8fb1c2160cab3bb86af09ea019d.jpeg" alt="">
在产品验收阶段,我会使用模型上线时的 OOT 样本作为预期样本,非 OOT 时段的近期抽样样本作为实际样本。不仅产品经理,算法工程师也需要对模型的稳定性进行评估,他们通常会在模型验收之前,使用验证样本作为实际分布,使用训练样本作为预期分布,这一点你知道就可以了。
我们期望的是,模型在遇到不同时间段样本的时候,每个分数段的人群占比不要发生太大变化。为了更直观看到预期分布和实际分布的这种变化,我们可以把人数分布直接转化为占比分布。
<img src="https://static001.geekbang.org/resource/image/8a/2e/8a9dcd6ed10de098d517d36821d7ea2e.jpeg" alt="">
通过这张图,我们肉眼就可以看到,在这个模型中,两个不同人群的占比发生了很大的变化。那么,我们该怎么去量化这个变化呢?这个时候就需要用到 PSI 指标了它的公式是PSI = SUM ( 实际占比 - 预期占比 ) * ln ( 实际占比 / 预期占比 )。
已知,这个信用评分产品的分数范围是 [0, 100]分数越高说明用户的信用越好。接下来我们来计算一下这个信用评分产品的PSI。具体来说我们可以分三步来操作分别是分箱、计算实际分布、计算PSI数值。
### 第一步:分箱
由于信用分数是一个个连续值,实际操作中我们不可能对每一个分数点进行测试,因此,我们需要将变量的预期分布进行分箱操作,然后统计每个分箱里面样本的占比。**分箱的方式有两种,一种是等频分箱,另一种是等距分箱。分箱方式不同,模型计算的结果也会有略微的差异。**
那么,什么是等频分箱和等距分箱呢?所谓等频分箱是指每个分箱中的样本数量相等,分数段不同,并且分数段是根据人数占比计算得到的。比如,对于把信用评分的结果,我们使用等频分箱的方式可以把它们分为 10 个箱子。其中,每个箱子分数段不同,但是里面的人数相同,示例如下:
<img src="https://static001.geekbang.org/resource/image/26/17/26324662429e17f535f0428cb5c0ea17.jpeg" alt="">
等距分箱指的是每个分箱中分数段相同,人数不同,人数是按照分数平均切分的。比如说,对于信用评分结果,我们使用等距分箱把它也分为 10 个箱子,那每个箱子中的分数段相同,但是里面的人数不同,大致样例如下:
<img src="https://static001.geekbang.org/resource/image/32/da/32c0900d84c50fe8dfyy0ee21f0f3cda.jpeg" alt="">
因为PSI看的是分数段中人数波动情况所以这里我们选择对预期分布进行等距分箱也就是上面的分箱方式。
### 第二步:计算实际分布
我们知道PSI比较的是预期分布和实际分布而模型上线前我们就已经有了预期分布我习惯使用算法进行OOT测试时候得到模型分布数据当然你也可以选择其他样本作为预期分布并且我们也已经对数据完成了分箱。接下来我们需要选择进行测试的样本把样本传入模型得到实际测试结果即所有测试用户的信用分数。然后我们再根据上一步选择的分箱方式将实际测试结果同样进行分箱计算分箱后的占比。一般来说测试样本距离当前日期越近越好。
<img src="https://static001.geekbang.org/resource/image/3d/64/3d05c5c1ac8950d92b66617140143164.jpeg" alt="">
### 第三步计算PSI
完成分箱计算出实际分布之后我们就可以利用公式计算PSI了。为了方便计算和查看我们将前两步的结果整合到一张表格中。
<img src="https://static001.geekbang.org/resource/image/3d/64/3d05c5c1ac8950d92b66617140143164.jpeg" alt="">
以第一行的分数段 [0,10]为例,我们先计算实际占比-预期占比 = 1.5%-2% = -0.5%,然后计算实际占比/预期占比 = 1.5% / 2% = 75%之后计算ln ( 实际占比/预期占比) = -0.28768。最后是计算 index = ( 实际占比 - 预期占比 ) * ln ( 实际占比 / 预期占比 ) = -0.5% * -0.28768 = 0.0014。
接下来我们分别计算其余9组分箱的 index 值,最后可以得到下表的数据:
<img src="https://static001.geekbang.org/resource/image/39/e1/39d0abbb51eebb3a9ac5bcbb9a61bbe1.jpeg" alt="">
根据公式最终的PSI值就是表格每一个分箱的 index 求和PSI=sum(index1+index2+...+index10) = 0.0127。
以上就是PSI指标的计算过程了。但是得到PSI之后我们怎么利用它对模型稳定性进行评估呢我们得到的数字又代表什么业务含义呢
在业务层面PSI 数值越小说明两个分布之间的差异也就越小,也就代表模型越稳定。更具体一点,我们一般会这么定义模型的稳定性:
<img src="https://static001.geekbang.org/resource/image/1f/3b/1fbcbcdb5e47c6085bee1eb185949f3b.jpeg" alt="">
## 小结
PSI 的计算过程非常简单,在工作中我们也不需要手工去计算 PSI通过 Python 代码就可以直接计算。今天,我希望你能通过它的计算过程深入理解它的原理。
首先PSI指的是群体稳定性指数它可以表示不同样本下模型的稳定性。稳定性是一个相对的概念在信用模型中我们会使用至少两类分布结果进行判断分别是预期分布结果和实际分布结果。这其中计算PSI的目的就是为了判断实际分布和预期分布相比是否存在比较大的变化。
那在实际计算PSI的时候我们会通过三步来进行分别是分箱、计算实际分布和计算PSI。其中分箱是一个非常常见和重要概念不仅是在计算PSI的时候在对其他指标进行评估的时候我们也会借助分箱的方式来帮助我们处理数据。
至于利用PSI对模型进行评估就非常简单了总的来说就是PSI 数值越小两个分布之间的差异也就越小模型越稳定。PSI的值在0.1-0.25之间,都是可以接受的范围。
除此之外在实际工作中使用PSI的时候我还有3点建议提供给你。
<li>
PSI 值不应该只是在模型上线时候关注,在上线后我们也要持续关注。因为客群必然会随着时间的推移发生变化,这会导致人群分布发生变化,而且这个变化会越来越大,从而影响模型的预测能力。
</li>
<li>
影响 PSI 的变化因素很多,常见的有客群变化(尤其是互金市场用户群体变化很快)、数据源变化(外部接入的数据源停用或者效果下降)等等。
</li>
<li>
上线后为了能够随时关注模型稳定性的情况我建议你根据业务场景对模型稳定性的要求对模型PSI进行按日、按月或者按季度监控。
</li>
## 课后讨论
今天的最后,我还想请你思考一个问题,我们今天说了 PSI 指标是为了衡量两个分布之间的差异它的公式是SUM ( 实际占比 - 预期占比 ) * ln ( 实际占比 / 预期占比 ) 。那么,为什么公式需要增加“ ln ( 实际占比 / 预期占比 ) ”部分而不是直接使用SUM ( 实际占比 - 预期占比 ) 呢?
期待在留言区看到你的思考和答案,我们下节课见!

View File

@@ -0,0 +1,114 @@
<audio id="audio" title="23 | 模型监控:产品经理如何建设算法模型监控指标体系?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/20/f5/20e95c694cd5cb71805cyyc2a21e63f5.mp3"></audio>
你好,我是海丰。今天,我们来讲一讲算法模型监控指标体系的建设。
算法模型的监控指标体系(后面简称监控体系),就是将业务数据进行采集,同时用可视化图表展现给用户,并且提供相应的告警功能。
一般来说,当业务线初建的时候,我们可以不用考虑太多监控体系的需求,因为我们需要把精力放到怎么让业务“活下去”。但是当业务“活”下来之后,我们就要开始考虑搭建监控体系,让模型能够“活得更好”。那么,监控体系是怎么做到的呢?
具体来说,通过监控体系我们可以知道:
- 当前这条业务的现状和过去业务数据的对比
- 当前业务是否正常,可能存在的问题,并且通过这些问题追溯原因
- 未来业务的趋势,可能的完善方向
今天,我们就一起学习怎么去建设算法模型监控指标体系。
## 监控体系的三个核心问题
在规划一个监控系统的时候,有三个核心问题需要我们想清楚:
- 这个项目的业务背景是什么
- 这个监控体系是给谁解决问题的
- 你想要怎么解决问题
接下来,我们一个一个来看。
### 第一,你做这个项目的业务背景是什么?
做任何一件事之前,我们都要想清楚为什么要做,做监控体系之前也不例外。**不同的业务背景意味着你对这个项目不同的解决路径,也意味着你对这个项目投入多少精力,这需要你在做这个项目之前考虑清楚。**
一般来说,**建设监控体系这个需求有可能是你作为产品经理在业务发展过程中发现的,也可能是你的老板或者客户提出来的**。
如果是你自己打算做一个监控体系,那么你就要思考:
- 你为什么要做这个东西,现在是遇到了什么问题
- 你对这个问题的洞察怎么样
- 你的解决方案是什么,解决方案是不是只有监控体系这一个,还有没有其他的办法
举个例子之前我们刚开始做AI项目的时候根本没考虑过做监控体系所以把很多精力都用在了模型的迭代和满足客户个性化需求上。突然有一天客户反馈说我们的评分产品全部返回默认值经过排查我们才发现这是模型底层依赖的数据源出了问题。解决这个问题之后我们才决定去搭建一个监控体系。
所以在这个例子中,为了解决我们不能及时发现模型问题,比如无法了解当前调用数据的问题,就是我们做监控体系的背景。
如果是老板或者客户提出的,那么你要考虑他为什么要做这个。常见的原因有四个:
- 模型现在是否暴露出了一些问题,你没有发现
- 你的老板或者客户看到别人有监控体系,认为我们也要有
- 老板为了有一套系统去“占坑位”
- 老板打算把这套系统和模型能力一起打包做成一个解决方案对B端销售
这个时候,老板/客户提出需要搭建一个模型产品监控体系就是我们的业务背景。
### 第二,你要给谁解决什么问题?
明确了业务背景,下一步,我们要明确监控体系是要给谁解决什么问题,这其实就是在明确我们要解决问题的价值是什么。具体来说你需要明确,**你做的这个监控体系到底在解决谁的问题,解决的是什么问题**。这听起来好像有些啰嗦,但这两个问题环环相扣,知道了目标用户,我们就能针对具体问题具体分析,得出这个监控体系的建设侧重点,做出令人满意的产品,因此把它们拆开来看还是很有必要的。
首先,怎么确定你的目标用户是谁呢?我们可以从需求提出的两个方面来思考。
**如果这个需求是内部需求。**比如说,你在过去的业务中发现模型出现了衰减,但是业务方不知道,这就会导致模型的最终效果不好,反馈延迟。这个时候,你的用户其实是你和你的业务方,因为你们需要尽早知道模型是否发生了异常。因此,这个监控体系的重点就要放在业务数据展示和告警提示上面。
再比如说你的老板只是看别人有这个产品认为你们也要有有些大公司这种情况还是有的。这个时候你的用户就是你的老板你要解决的就是“有没有”或者“占坑”的问题。因此你的产品重点要放在业务展示上展示的角度要以领导视角为主甚至整个产品都可以做得比较简单比如你可以先做一个MVP出来解决“有没有”的问题。
**如果这个需求是外部需求。**比如说你在B端市场销售模型时候发现某家银行的风控业务人员想要更方便地进行模型的管理也就是有一套一体化解决方案的需求。这个时候你的用户是你的B端客户。因此你的产品重点就要放到B端客户的业务痛点上解决“卖得更好”的问题。
但是,有一点我们需要特别注意:**很多时候你的目标用户不只是真正使用你产品的用户。尤其是在B端场景下在采购产品这件事情上有决定权的往往不是真正使用者。**
举个例子像钉钉这样的软件虽然使用者是我们这样的“打工人”但真正具有购买决策权的往往是公司的HR或者CEO。如果你要做类似的软件就要把他们当做你的用户只有做出可以打动他们的功能才能让你的产品具有竞争力。
明确了用户之后你就可以去调研这些用户面对的问题是什么了。如果是内部业务线的需求我们面对的问题可能就是模型突然异常业务不能实时告警并且及时处理。如果是ToB销售的业务需求我们可能需要解决的问题就是业务人员没有办法从全局角度管理和监控模型。
总的来说要明确解决的问题是什么需要你深入到业务中去挖掘用户的痛点这也是产品经理最基础的要求。我给你的建议是如果你做的是C端产品你要把自己作为产品的用户去深入体验产品、发现问题。如果你做的是B端产品你要和业务的相关者深入沟通最好和他们一起工作看看他们的工作流程是怎么样的有没有遇到什么问题以及当前没有产品的情况下啊是怎么解决这些问题的。在这个过程中你可以尝试利用“5W2H”的方法来问你的用户、问你自己。
### 第三,你要怎么解决问题?
在了解了背景,用户和要解决的问题之后,你需要做的就是去真正地解决问题了。至于具体该怎么做,你可以参考我接下来要讲的实际案例。
## 案例ToB服务中模型监控体系搭建
下面,我就以我做过的一个监控体系为例,来给你讲一讲详细的过程。
当时我还在一家创业公司这个公司是给银行、互金机构提供风控模型的。它提供的产品形式是API接口你可以理解为是银行给我们一个用户的手机号我们告诉银行这个用户的风险分是多少。银行会结合我们提供的风险分和其他的数据对用户的风险进行二次判断来决定是否给用户进行放款。
我们遇到的问题是,有时候接口会突然报异常,模型效果会逐步下降,但是产品侧却抓不到这样的数据,模型侧也没有对模型进行监控。最后,客户反过来投诉我们,这对公司的口碑造成了影响。
结合刚才讲的三个核心问题,我们一个一个来回答。
首先是明确项目的业务背景,这个很容易得出,就是我们的内部数据监控和告警出现了问题。
其次是明确我们的目标用户以及要解决的问题。我们的目标用户应该是产品经理自己以及B端的商务运营同学。要解决的问题就是及时发现模型上的问题在客户发现之前尽快修复、减少客诉。同时归纳这些问题反哺模型和研发侧对技术人员提出更高的要求。
最后就是去解决问题了。基于我们的背景和面对的问题,产品的定位就很清楚了:给产品和运营同学提供一套,能够查看所有模型,同时监控模型性能指标和稳定性指标,并且可以做到实时报警的工具。这个工具需要实现的功能列表梳理出来之后是下面这样的:
<img src="https://static001.geekbang.org/resource/image/1f/cd/1fd7a75ecaabbbde41e8baeb52a427cd.jpg" alt="">
在这里,比较重要的监控功能点是模型全景,也就是监控首页或者说是总览页。虽然它不需要给出具体的模型指标,但要展示出都有哪些模型在用,调用过程中是否有异常,这方便我们根据异常下钻到明细信息中。
另一个重要的监控功能点就是模型性能指标和稳定性指标这需要根据模型的类型分别去展示模型近期的性能指标波动图在图中需要展示模型的正常范围值。这个正常范围值我们是根据实际业务定义的比如我们对于KS要求比较高所以把范围值定义在25-40之间。
除此之外,模型输出结果指标也是一个重要的监控功能点。为什么要监控模型的输出结果指标呢?我们之前就因为没监控模型输出而出现了大问题。当时,模型给到客户的产品输出范围是[0,100]但模型底层依赖的某个数据未更新这让模型输出了大于100的数据。同时在工程部署时候模型也没有对输出值进行二次处理这就导致客户最终拿到的是不合理的结果。因此我们不但要监控模型的输出也要对不合理的输出及时告警。
不仅如此我们还要注意不同指标的监控周期也不同。比如我们的信用分模型是按月打分所以相应的KS、AUC、PSI指标也都要按月更新。这需要结合我们模型的实际情况进行设置。
确定好这些具体的功能列表之后我们就可以进行后面的原型设计和PRD设计了。后面的流程就和我们一般的产品设计没有什么区别我也就不再赘述了。
## 小结
这节课我和你分享了从0到1去规划一个产品的思路虽然这个产品是模型的监控体系但是你在做其他产品设计的时候也完全可以参考这个套路。**总的来说,我们要先明确项目的业务背景,然后明确你要给谁解决什么问题,最后再去设计解决方案。**
在这里我想和你强调的是虽然具体的解决方案是一些能拿得出来的产出如设计原型、PRD好像最值得我们关注。但事实上最需要我们关注的反而是我最开始提到的**背景、用户和问题**。这是因为,只有把做事情的目标搞清楚,才能让自己做出的事情是有价值的。否则,你的解决方案再优秀,只要没有解决用户的问题,它就是没有价值的。
## 课后讨论
假设你现在是一个C端的产品经理上游是多条业务线下游是算法团队。如果这个时候你的老板让你做一个模型监控体系你会怎么做
期待在留言区看到你分享和答案,我们下节课见!

View File

@@ -0,0 +1,92 @@
<audio id="audio" title="春节加餐1 | 用户增长模型怎么利用AI技术判断新渠道性价比" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/12/80/12f4087211cf2431ff6876e42e21d880.mp3"></audio>
你好,我是海丰。
马上就要到新年了,我在这里先给你拜个早年,**祝你牛年顺风顺水,随心随意**
到今天为止,我们基本上已经把 AI 产品经理的三大能力学完了我非常开心看到很多同学一直坚持学习到现在并且还一直和我互动比如“悠悠”“AsyDong”“Yesss!”等等,希望你们能和我在新的一年里继续走完这趟 AI 学习之旅。
春节期间在陪伴家人之余,也希望你不要停下学习的脚步。这里,我特意为你准备了两篇轻松的加餐。今天,我们先来聊聊很多同学都比较关注的用户增长模型,说说拉新模型怎么构建,以及模型效果怎么评估。
## 关于用户增长理论
首先我们来说说什么是用户增长理论。关于用户增长有一个著名的模型——AARRR它是Acquisition、Activation、Retention、Revenue、Refer这5个单词的缩写对应着用户生命周期中的5个重要环节如下图所示。
<img src="https://static001.geekbang.org/resource/image/44/0e/445e00a9f4c3bfc0960c83d6e3bf3f0e.jpeg" alt="">
如果从拉新角度出发,要想实现一个完美的模型,有一个重要的前提就是需要不断地烧钱获客。但从如今市场上的流量分布来看,新用户的增长一定会越来越缓慢,野蛮式的扩张已经成了过去式,资本的进入也愈来愈趋于理性,所以,从这套模型出发,从获客到激活再到留存的这条路径困难重重。
这个时候,我们可以换一种思路,直接从留存出发。如下图所示,也就是先做好产品,夯实基础建设,做好运营服务,然后再在留存的基础上进行变现,确保产品的变现能力后,再进行拉新。这样才会使产品拥有复购的能力,而不会陷入拉新、流失、再拉新、再流失的恶性循环中。
<img src="https://static001.geekbang.org/resource/image/c4/16/c4781a207533e0c61e281d66f7432116.jpeg" alt="">
现阶段,先留存、再变现,接着推荐、拉新、激活也是大部分产品的一套玩法。毕竟拉新的渠道成本太高,对于以 CVR 为目标的产品来说,这样的方式更为健康,而且随着资本越来越理性,活下去才是产品最重要的指标。
## 关于用户增长模型
确定了玩法,接下来我们再来解决拉新的渠道成本太高的问题。最直接的,就是我们尽可能地筛选出性价比最高的渠道,长期作为拉新入口。那该怎么做呢?接下来,我们就来说说,怎么通过 AI 模型计算拉新渠道的人群特征和我们产品客群是否匹配,来预测拉新渠道的用户在产品上的留存程度,进而判断该渠道的性价比。
### 拉新模型的创建
假设,我们的产品长期通过京东 App 渠道进行推广销售。现在我们想要尝试新的渠道比如通过“某款短视频自媒体”对产品拉新。为了预测“新渠道”相比于“主渠道”的留存效果表现我们要创建一个拉新模型。拉新模型的创建准备工作主要有5步下面我们一一来讲。
**首先是确定模型 Y 标签的口径:**
- 已留存用户流量引入后30 日以内登录过设备
- 未留存用户流量引入后30 日以内未登录过设备
**然后是数据准备。这里我们要准备两份样本一份是主渠道样本一份是新渠道样本各10000个。**在收集到的主渠道样本中,已留存样本占 700 个,比率为 7 %;在收集到的新渠道样本中,已留存样本占 900 个,比率为 9 %。
那么,总样本的 70%就是建模样本,剩余的 30% 就是验证集,这个切分比例是约定俗成的。
**接着是建立特征工程。** 我们基于两个渠道来的流量,选择了同样的入模变量,并用 IV 值对它们进行排序,表格如下:
<img src="https://static001.geekbang.org/resource/image/22/37/220a7340b9ecaeeyya3454bd0f89e637.jpeg" alt="">
你可能会问,这里只有一个表格,主渠道和新渠道怎么没有区分特征呢?其实,正常情况下是应该区分的,但这里,我们为了简单就不对特征做区分了。
**准备工作做到这里,我们就可以建模了**。这里我选择使用逻辑回归和决策树XGBoost进行建模。为什么选择它们呢我来一一解释一下。
逻辑回归模型的优点是具有良好的可解释性和稳定性,所以模型选择逻辑回归作为基础模型之一,可以从业务上很好地解释各个特征的作用。
XGBoost 是机器学习界炙手可热的算法我们在竞赛界经常可以看到它的身影。在样本量不是非常大的情况下XGBoost对非线性关系有很好的拟合能力并且可以输出变量的重要性排序。因此这次建模我也选择它作为基础模型之一。
**最后就是模型的融合。模型融合的思路主要有两种:前向融合和后向融合。**
前向融合是把前一个模型的输出作为后一个模型的输入,类似一种串行的关系,而后向融合是由若干个相关性低的模型同时进行建模预测,将结果归一化后,再由某种算法进行融合得到最终结果的方法。
这次模型融合,为了让融合后的模型更加简明清晰,也为了方便融入更多的模型,我们采用的是后向融合方法。具体来说就是,让刚刚说的 2 个模型结果变为同一量纲,再经过加权平均后得到最终的模型结果。融合后的模型方差大幅降低,稳定性增强,并且模型效果有时会优于任何单个模型。
最终我们把30%验证集的样本数据输入到模型中,得到的效果如下:
<img src="https://static001.geekbang.org/resource/image/ae/9f/aec130e0dc4b3881866e3224e667b09f.jpeg" alt="">
## 模型分析
从验证集表现上来看,虽然从模型效果上来说“主渠道”&gt;“新渠道”但两个模型的KS和AUC值相差不大。由此我们可以推测出以下2个结论
<li>
“主渠道”的原始特征虽然有很多高 IV 值的,但是相互之间有很强的相关性,所以对模型的贡献并没有那么高,因此模型的表现也没有特别地好;
</li>
<li>
“新渠道”可能引入的用户群体活跃,并且数据表现比较好,因此效果并不比“主渠道”差太多。
</li>
总之,从模型的结果来看,“新渠道”的表现还有很大的提升空间,并且我们可以尝试多个“新渠道”做横向的比较,最终选出效果最好的渠道。
那么对于这节课的简单模型来说它还可以从哪些地方进行改进呢”我认为可以从2方面入手
<li>
由于观察期时间窗口的限制,这次建模的特征大多取近 30 天的口径。如果取到近 60 天口径,可能会让模型有进一步的提升;
</li>
<li>
本次建模的参数调优为手工调参的方式,并且应用的是浅层机器学习模型,因此可能是局部最优解,后续我们可以引入 DNN 深度模型进行优化改进。
</li>
## 小结
这节课,我们讲了针对于不同渠道做拉新模型的效果比较。虽然实际工作中的模型更为复杂一些,但是流程和我们是一致的,都是要先确定模型 Y 的口径,然后做准备数据、创建特征工程、模型训练、模型融合,最后是效果评估。
对于模型的效果评估来说,产品经理需要掌握的就是 KS 和 AUC 这样的基础评估指标,然后通过新旧模型之间基础指标的对比,再结合实际业务指标的反馈,来综合评判模型的优劣。慢慢地,你就会发现模型指标与业务指标的内在联系了,这还需要你在工作中去体会。
最后,再次预祝你假期快乐,我们下节课见!

View File

@@ -0,0 +1,46 @@
你好,我是海丰。
今天是我们春节假期的第二篇加餐。这节课,我筛选出了一些常见的课后问题,对它们做了统一的整理,同时也对一些优质回答做了补充讲解,希望更多同学可以进行参考。
## 常见问题
问题1老师我总是容易弄混KS、PSI等很多指标。
我看到有很多同学提出类似的问题这些都是AI产品经理需要掌握的基础概念而且在接下来的项目实践篇都会涉及。所以这里我会把一些基础概念进行汇总希望能再帮你巩固一下。
<img src="https://static001.geekbang.org/resource/image/04/f1/042de3a6c71ed43796d8b2418aeaaff1.jpg" alt="">
最后我再补充解释一下OOT这个基础概念。OOT是跨时间测试使用的样本是和模型训练集验证集没有交集的样本目的是用来判断模型的泛化能力。我在[第3讲](https://time.geekbang.org/column/article/322393)提到过:
>
在我刚开始转做 AI 产品经理的时候,遇到过这么一件事儿,我们的用户年龄预测模型训练时候 的 KS 值(模型中用于区分预测正负样本分隔程度的评价指标)很高,但是 OOT 测试的时候 KS 还不足 10。当我拿着结果去找算法同学沟通的时候他就说了一句“可能是过拟合了我再改改”。
也有同学提问说“不明白为什么OOT过高就是模型样本选择的问题”我这里表达的意思其实不是OOT过高就是模型样本选择有问题而是说如果模型在验证集上的KS值不错但到了OOT测试的时候KS反而不好就说明可能是我们当时选择的样本不合理。比如训练和验证样本抽取的时间过早很多数据发生了变化这就导致模型在过去样本上表现好但在目前样本上不适用。
## 课后讨论题
问题2假设我们业务方 HR 团队希望你分析每一个员工的离职概率,你觉得用朴素贝叶斯合不合适?为什么?([12 | 朴素贝叶斯让AI告诉你航班延误险该不该买](https://time.geekbang.org/column/article/330159)
<img src="https://static001.geekbang.org/resource/image/69/ed/69523164a1700ccb735468520e1fd5ed.jpeg" alt="">
首先,我非常认可这位同学的观点。离职率的预测是一个非常复杂的模型,正常情况来说,只用朴素贝叶斯大概率是不够的。但作为产品经理,我们要回到场景上看问题,场景不同,选择的模型不同。因此,我认为对于这个问题,我们可以分为两个阶段来考虑。
第一个阶段快速响应从0到1。我们要结合成本来考量因为一般公司内部部门的诉求样本比较少并且他们对准确率的接受程度比较大他们在意的是从无到有。那么针对启动期没有效果指标可以参考的情况我们可以先用朴素贝叶斯来完成业务方从无到有的需求做到快速响应。
第二个阶段:根据实际情况,考虑资源倾斜。这个阶段,我们就要看模型的实际使用情况。不过,一般来说,内部部门的项目就到此为止。但如果你是在众包机构工作,就需要切实投入更多的资源,来训练一个模型解决资源倾斜的问题。
希望同学们可以根据我提供的思路,来继续深入思考一下这个问题。
问题3假设你们公司是做电商业务的现在领导打算让你做流失用户的召回你认为评估这个模型的指标都有哪些为什么[18 | 核心技能:产品经理评估模型需要关注哪些指标?](https://time.geekbang.org/column/article/337764)
<img src="https://static001.geekbang.org/resource/image/d9/32/d985b475a956c4dd2c506d6654a2bf32.jpeg" alt="">
这位同学的思路很好!下面,我们再来说一下我的思路。对于产品经理来说,我们首先需要明确做一件事情的目的是什么,领导预期达到的目标是怎么样的,然后明确指标的计算口径。
其次我们要明确这个问题属于什么问题。对于判断流失用户大部分场景都定义为分类问题。在实际操作中它也可能被当作一个回归问题来处理比如我们判断用户多久之后会流失。总的来说分类问题还是使用KS作为评估指标比较多。
最后,就是模型的评估。一般来说,我们给到业务评估指标会使用精确率和召回率,这是一对经常被同时使用的指标。这里,我还要提醒你一点,精确率和准确率是两个不一样的指标,它们的概念,我都总结在了刚才的脑图中,我们要记住。除此之外,因为流失用户在整个用户群体中占比不会太大,所以我们一般不使用准确率作为评估指标。
最后,春节假期就快结束了,我也希望这次加餐能帮助你做好准备,迎接新的挑战,我们节后再见!