美文网首页@IT·互联网程序员@产品
人工智能产品规划流程——CRISP-DM

人工智能产品规划流程——CRISP-DM

作者: P与N的协奏 | 来源:发表于2019-04-07 16:15 被阅读8次

    移动互联网的产品设计流程,通常要经历需求调研、需求分析,功能设计,视觉设计,编码测试几个阶段,围绕的重心是智能手机设备,对于产品的功能流程设计是否合理,用户交互是否顺畅,界面设计是否美观有着较高的要求,如下图所示。


    移动互联网产品规划流程

    但是在人工智能产品设计中,核心的重点不再是手机界面,而是对于业务的理解,对数据的理解和对算法的理解,这就要求我们在进行产品规划的时候,将设计的重点从手机界面转变为以围绕业务目标的数据为核心。目前业内较为常见的设计流程是CRISP-DM(Cross-Industry Standard Process for Data Mining,跨行业数据挖掘标准流程)。


    CRISP-DM跨行业数据挖掘标准流程
    在1996年的时候,SPSS,戴姆勒-克莱斯勒和NCR公司发起共同成立了一个兴趣小组,目的是为了建立数据挖掘方法和过程的标准。并在1999年正式提炼出了CRISP-DM流程。这个流程确定了一个数据挖掘项目的生命周期包括以下六个阶段:

    商业理解:了解进行数据挖掘的业务原因和数据挖掘目标
    数据理解:深入了解可用于挖掘的数据
    数据准备:对待挖掘数据进行合并,汇总,排序,样本选取等操作
    建立模型:根据前期准备的数据选取合适的模型
    模型评估:使用在商业理解阶段设立的业务成功标准对模型进行评估
    结果部署:使用挖掘后的结果提升业务的过程

    这套流程没有特定工具的限制,不论是使用SPSS这类图形化的数据挖掘工具还是python这类可用于数据挖掘的编程语言都可以,也没有特定领域和行业的局限,是适用于所有行业的标准方法论,相对于其他的数据挖掘方法路,CRISP-DM具有灵活和适用范围光的优点。

    需要特别注意的是,虽然这套数据挖掘流程的完整生命周期包含六个阶段,每一个阶段都依赖于上一个阶段的产出物,但是这六个阶段的顺序却并不是固定的,尤其是商业理解和数据理解,数据准备和建模阶段可能经常出现反复循环的过程。是否可以继续进行下一个阶段取决于是否有达到最初的业务目标,如果业务目标没有达到,那么就要考虑是否是数据不够充分或算法需要调整,一切都以业务目标为导向。

    那么接下来,我们用一个电商案例来看一下如何在实际工作中运用这套流程。

    商业理解

    海微购是一家从事跨境电商业务的创业公司,公司在前几年抓住了海淘的趋势,用户量和交易额都还不错,在新的财年,公司希望能在去年的基础上将GMV提高10%,并以此为目标制定新一年的工作计划。

    1) 确定业务目标

    首先,需要先确定业务目标。根据电商零售额公式,零售额=流量转化率客单价*复购率,公司认为,在获客成本较高的市场环境以及本公司经营的海淘产品复购周期较长的情况下,应优先提高转化率和客单价两项指标。根据SMART目标制定原则,确定下一次迭代的产品目标为:猜你喜欢模块中的商品点击量需提高20%,交叉销售额提高10%。

    2) 确定数据挖掘目标

    第二步,需要将业务的问题转化为一个数据挖掘的问题。根据业务目标,我们可以将其转化为以下几个数据挖掘问题:
    ➢ 聚类问题:构建大数据用户画像,形成用户的商品偏好标签体系,用于商品精准营销和消息推送
    ➢ 预测问题:构建用户流失预警模型,预测用户的流失可能性,对可能流失的用户进行挽回关怀,防止流失
    ➢ 分类问题:结合用户日常消费额度和信贷记录,向用户推荐符合其购买力或购买习惯的商品,提高转化率和客单价
    …………

    在制定数据挖掘目标时,需要明确数据挖掘的问题是一个分类问题,聚类问题还是一个预测问题,以便于后续的建模阶段选择合适的算法。另外还需要确定的是数据挖掘的范围,是针对所有用户大范围调整,还是先针对小规模的部分用户进行A/B Test,待验证成功之后再全面推行。

    如果前期有相关的经验或数据积累,最好在这一阶段定义清楚数据挖掘成功的标准是什么,例如推荐的准确率要提高40%,或用户的流失概率降低20%等,通过可量化的指标评估整个工作的效果。

    3) 制定项目计划

    第三步,明确好目标之后,就可以根据具体的,可量化的方案组织相关的干系人来评估工作量,根据工作量倒排项目计划表,将目标拆解到更小的时间颗粒度,并指定相关责任人进行任务跟进,如下图所示。

    项目阶段 时间 主要任务 责任人
    商业理解 1周 确定业务目标 产品经理
    数据理解 3周 确定所需数据 产品经理,爬虫工程师
    数据准备 5周 数据清洗,特征工程 产品经理,算法工程师,数据库管理员
    建立模型 2周 算法建模 算法工程师
    模型评估 1周 模型调参,效果评估 产品经理,算法工程师,测试工程师
    结果部署 1周 部署上线生产环境 算法工程师

    在这个阶段需要明确各个环节的交付产物,并识别可能的项目风险,提前制定风险应对计划,例如本公司缺乏某方面的数据,需要从外部获取,或者相关人员配置不足,需要招聘或借调人力资源的支持等等。在项目进行的过程中持续监控,以确保项目的正常进行。

    数据理解

    明确了业务目标之后,我们需要针对数据挖掘的问题收集相关的数据,并对数据进行初步的处理,目标是熟悉数据,探索数据与数据之间的内在联系,并识别数据的质量是否有问题。

    1) 收集数据

    数据理解的第一步是收集数据。根据来源的不同,数据可以分为内部数据和外部数据两类,根据数据的类型又可以拆分为用户数据和商品数据。海微购公司的产品经理通过排查发现,公司目前已经通过埋点收集到了用户在web端和APP端的行为数据,且平台售卖的商品有专门的人员负责打标签的工作,内部数据较为完善,但是还缺乏用户对于平台上未售卖商品的偏好数据以及用户的人口属性数据。

    针对这一点,海微购公司的产品经理决定组织一次用户有奖问卷调研活动,通过问卷调研的方式,抽样选取用户进行问卷填写,成功的收集了用户对于平台未售卖商品的偏好数据以及人口属性数据。另一方面,通过网络爬虫数据,爬取了竞争对手平台的所有商品销售量,并根据销售单价推算出了总的销售额,完善了现有的数据体系。

    2) 数据标注

    海微购公司所拥有的数据并不只有数据库中已经结构化了的数据,他还拥有很多非结构化的数据,例如商品的图片数据,客户与客服的通话语音数据等等。

    这些非结构化的数据并不是直接用于建模,而是需要先进行数据标注,将其转变为计算机可以识别的数据格式。例如,如果对商品的图片进行了结构化标注,建模阶段就可以通过图片识别技术对新上线的商品进行自动分类和打标签,甚至自动生成商品的广告海报图片。如果对通话语音进行了数据标注,就可以为后续的人工智能客服提供语义数据,降低公司成本,提高服务效率。

    3) 描述数据

    当数据准备充分之后,需要对数据进行描述,以供后续阶段使用。主要包括对数据量的描述,数据值类型的描述以及编码方案的描述。

    不同的算法对于数据量的大小有一定的要求,虽然越大的数据集可以生成更为准确的算法模型,但是同时也会增加计算的时间。所以标注数据量的大小可以让算法工程师在建模之前决定是使用全部的数据集,还是从一个大的数据集中分出若干个小的子集来进行建模。

    建模的数据可能有多个来源,且收集数据的人和负责建模的人可能不是同一人,所以在建模之前务必对数据的类型进行描述。数据的类型有多重,例如数值型,分类型,布尔型,时间等等。标注清楚数据类型可以加快后续建模阶段的效率,防止数据类型的错误而导致出现问题。

    在数据库中,常常使用不同的数值来表示不同的数据特征,例如海微购公司的用户来源可能来自地推,线上获客,朋友推荐,自主下载等多个渠道等,这些渠道类型在数据库中可以用文字来进行表示,也有可能用1234的数字来表示,在数据描述中需要特别注明这一类的数据及其对应的含义,以便后续阶段能正确的使用这些数据。

    数据准备

    数据准备是数据挖掘最重要的阶段之一,通常这一阶段所花费的时间和工作量占整个项目的50%-70%。如果产品经理在前期对于业务理解非常准确,数据理解也非常充分,那么将极大的减少数据准备阶段的工作量,提高工作的效率。

    1) 选择数据

    在第一步选择数据阶段,需要做两件事情,第一是在所有的数据中选择哪些数据作为训练集,哪些数据作为测试集。第二是选择参与建模的特征字段有哪些。

    以海微购公司为例,公司希望提高提高推荐的准确度和销售额,那么需要通过用户画像,选择典型的主要客户,例如最近有过购买记录,并且在一定时间内持续活跃的用户。而不能选择已经流失的,或者是从来没有购买记录的无效客户。

    对于参与建模的特征,需要选择那些与业务目标息息相关的数据,以购买商品转化为例,从业务经验来看与之相关的数据有用户的月均消费额度,用户的商品偏好,商品的曝光率,好评率等等。当然,也有一些基于统计学的方法可以帮助我们选择数据,例如相关系数,卡方检验,T检验等等,我们在特征工程的章节会详细的讲到这些方法是如何使用的。

    2) 清理数据

    数据准备的第二步,是对数据进行清理,在实际的工作中,收集的数据不一定是100%准确无误的,常见的数据问题有缺失值,错误值,离群值,编码不一致和无效数据。

    例如用户的年龄信息与是否购买某些商品有非常强的关系,但是用户的年龄信息对于用户本身来讲不是一个必填的信息,所以商家不一定能获取到而造成缺失值。另外一种可能就是用户未填写真实的年龄,导致年龄出现负数或大于200的数这类错误值。

    还有一些数据例如用户的身高数据,如果绝大多数用户的身高在1.5米到1.9米之间,但是并不排除有一些用户的身高可能低于1.5米或高于1.9米,这类数据并不是错误数据,而是离群值,这类离群值量级较少,不是主要客户特征,但如果不加以排除直接参与到建模阶段,就有可能对建模造成一定的负面影响,比如影响正常的平均值或极差。

    编码不一致的问题也经常出现在数据中,例如很多数据在低于1万的时候,显示的是具体的数值,而高于1万之后就不再显示具体的数值,而是显示成x.x万这样的格式,造成格式编码不一致的情况,在建模之前需要将所有数据处理为统一的单位和格式。

    数据的正确性会直接影响后续建模阶段的模型效果,所以在数据准备阶段需要将这些问题数据进行处理,最简单的方法就是直接删除有问题的数据,但如果数据的量本来就比较少的话,也可以通过一些统计学的方法对数据进行修复或插补,例如均值填补法处理缺失值,盖帽法处理离群值等等。

    3) 构建新数据

    在数据挖掘中,有一些数据可以通过其他的数据转化而来,例如如果获取到了用户的身份证信息,就可以根据身份证的生成规则知道用户的籍贯地址,生日以及性别,知道了用户的手机号,就可以通过手机号的归属地查到用户所在地。知道了用户的常用收货地址,结合房产数据,可以推测出用户大致的月收入。

    除了对已有数据进行转化,还可以通过人工定义的方式将一些用户的事实行为通过规则转化为新的数据,例如将月均平台消费超过1万的定义为高消费客户,将月活跃天数大于15天的定义为高活跃用户等等。

    4) 数据降维

    建模速度与数据的量级成正相关,数据量越大,建模的时间也就越长,我们在数据准备阶段,可以通过数据降维的方式减少数据特征,减少数据中的特征数量的同时,避免丢失太多信息并保持模型性能,以此达到简化计算量的目标。

    数据降维的另一个目的是对数据进行可视化,我们生活在一个三维的世界中,但如果数据的维度大于三维,就无法进行可视化了,而通过降维将数据降为三维或二维的数据,并保持数据之间的关系,就可以通过肉眼来观察数据模型的效果了。

    建立模型

    到了这个阶段,之前的工作终于可以有所回报了,我们可以运用算法对前几个阶段准备的数据进行建模,看是否可以达到我们期望的结果。建模的过程通常会执行多次,使用多个不同的算法和参数,因为在实际工作中,只是用一个算法且仅执行一次运算就能圆满的解决业务需求,这样的情况几乎是不存在的,正常的情况是我们可能需要在数据准备阶段与建立模型阶段之间反复多次,以确保业务目标达到最佳的效果。

    1) 选择建模算法

    第一步,我们需要根据业务目标选择适合的算法,在前文我们提到过算法分为有监督学习和无监督学习两种,根据业务目标的不同,又可以分为分类算法,聚类算法或预测算法。

    算法的选择并不一定是越复杂的算法效果就越好,最终的效果取决于训练的数据以及设置的算法参数,所以我们可以在建模的时候,将适合的算法都尝试一次,根据结果来进行选择。

    2) 训练集评估

    第二步,在选择好使用哪种算法之后,我们需要选择与训练集对应的测试集数据,并对算法的结果定义一个明确的评价标准。对于有监督算法,通常使用模型的正确率来进行评估,而对于无监督算法,我们通常是根据结果是否易于解释,是否易于部署以及算法运行的时间等标准来评估

    3) 构建模型

    第三部,是真正建模的过程,在这个阶段根据算法的不同,可能需要对算法的参数进行调整,例如KNN模型中调整K的值,或者深度神经网络算法调整隐藏层的数量等。

    在每次调整算法参数并实际生成模型之后,我们需要根据在上一步定义的评价标准,记录模型的结果数据,这些结果数据将用来与其他的算法,以及同一个算法不同参数间的比较,确定最佳算法和参数。

    这听起来是一件非常琐碎且耗时的事情,事实也确实如此,但是感谢技术的发展,大多数调参的过程都可以通过计算机自动完成,不需要人来值守,而且通过集成算法的运用,我们可以同时使用不同的算法来对数据进行建模,我们在后面还会详细的讲到。

    模型评估

    至此,我们的项目已经完成了绝大多数的工作,在开始最后的部署阶段之前,最重要的事情是彻底的评估模型,根据在商业理解阶段定义的业务目标来评估我们努力的成果。

    1) 评估结果

    最终的算法模型结果有可能达成了我们最初的业务目标,当然也有可能没达成。达成了当然是一件好事,但如果没达成也不一定是一件坏事,就像爱迪生发明灯泡试验了一千种材料,失败了一千次也并不认为自己是失败了,他说:我只是证明了这一千种材料不适合做灯丝而已。

    数据挖掘没有达成业务目标的结果也不一定意味着建模的失败,有多种可能性导致不成功的结果,例如,业务目标一开始定得不够合理,与业务目标密切相关的数据未收集到,数据准备出现了错误,训练数据和测试数据不具备代表性等等。这时候我们就要回到之前的步骤,来检视到底是哪个环节出现了问题。

    2) 审核过程

    就像每个项目结束之后都需要进行复盘一样,在一次数据挖掘项目迭代之后也需要对过程的成功之处和不足之处进行总结,回顾每个阶段的任务与关键的决定,看看每个阶段所做的事情对于最终的结果是否有所贡献,有没有什么方法是可以简化或者改善某一阶段任务完成情况,有没有什么不足之处,是可以在下一次迭代时进行改进的,有没有什么导致失败的问题是可以在下一次提前预测到并且避免的。

    3) 确定后续步骤

    无论成功或失败,到现在都已经生成了最终的结果,那么就应该考虑一下接下来该做些什么了。一般会有两个选择。

    如果成功了,那么就进入最后的结果部署阶段,将数据挖掘的结果并入到产品的业务目标中。如果没有成功,那么可以返回前面的步骤重新设定业务目标或重新收集数据进行建模,有过一次失败的经历之后,有极大的可能发现失败的原因,并在下一次的建模中避免失败。

    当然,我们还可以选择其他方式来达成业务目标,毕竟一切的技术都是为了业务目标服务的,人工智能也并不是万能的,根据业务专家设置的规则或从产品运营角度也能提高业绩。

    结果部署

    建模的作用是从数据中找到知识,获得的知识需要以便于用户使用的方式重新组织和展现,这就是结果部署阶段的工作,根据业务目标的不同,结果部署简单的可能只需要提交一份数据挖掘报告即可,也有可能复杂到需要将模型集成到企业的核心运营系统当中。

    1) 制定部署计划

    根据业务要求和运算性能的的不同,部署的模型可分为离线模型,近线模型和在线模型三种。离线模型一般适用于重量级的算法,部署于大数据集群仓库,运算的时间需要以小时计,并且时效上通常是T+1的。近线模型适用于轻量级算法,一般在内存和Redis(一种支持Key-Value等多种数据结构的存储系统,适用于高速消息队列)中进行,运算的速度以秒为单位。而在线模型则通常根据业务规则来设置,在内存中运行,运行的速度以毫秒计。

    另外,部署还需要考虑不同编程语言对于算法模型的调取兼容性,在这个阶段算法工程师需要与原有业务的开发工程师进行联调协作,确保业务系统能够正确的调用算法模型结果。

    2) 模型监督和维护

    我们知道算法模型是基于历史数据得来的,但是在模型部署并运行一段时间之后,可能业务场景已经发生了变化,原有的模型已经无法满足当前的业务需要,这就需要我们在模型部署上线的同时,同步上线模型的监督和维护系统,持续跟踪模型的运行状况。

    当发现模型结果在出现短期异常值时,排查异常的原因,例如运营活动或者节假日等因素,当发现模型长期表现不佳时,则要考虑是否是用户和产品的数据构成已经发生了变化,如果是因为数据构成已经发生变化,则需要重新通过CRISP-DM流程构建新的模型。

    3) 生成最终报告

    最后,不要忘了向项目的相关干系人发送一份最终的项目总结报告,不论是在项目过程中一起并肩作战的同事,还是对项目关心的领导,都需要了解项目的最终成果,一个项目的成功,总离不开每个人的努力,常怀一颗感恩的心才能让一个团队走得更远。

    相关文章

      网友评论

        本文标题:人工智能产品规划流程——CRISP-DM

        本文链接:https://www.haomeiwen.com/subject/xuysiqtx.html