联合培养 | SQLFlow走进清华经管学院 清华-哥大商务分析双硕士项目课堂
导读
♪
Creative DIDI
2019年11月,滴滴高级数据科学家高梓尧老师受邀走进清华经管学院,来到清华大学-哥伦比亚大学商务分析双硕士学位项目的专业课之一“商务分析整合实践”课堂,给同学们做了精彩介绍,并指导大家实际上手使用了SQLFlow( http://sqlflow.org/ )。同学们学得怎样,对SQLFlow的评价如何?让我们来听听同学们的课程总结。Part 1
「 选题动机 」
清华经管学院自2018年春季以来推出“商务分析整合实践”课,这门课由清华经管学院副院长、管理科学与工程系徐心教授、刘登攀教授及王纯教授共同担任任课教师。
通过老师们在开课时的详细介绍,我们了解到这门课程的设立旨在通过指导学生参与企业所主导的商务分析项目使其获得真实的业界工作体验,从而加深同学们对商务分析知识的理解,提高其解决实际商务分析问题的能力。
老师们通过让大家参与真实企业项目的形式,采取企业+校园相结合的模式,从而调动大家的主观能动性,促进积极思考,在一边学习一边工作的过程中提升逻辑思维能力,同时体验和感受真实的一线商务分析场景。
课程结束后,这门课程将能够帮助学生增强系统全面地解决实际商务分析问题的能力,使其熟练使用现代企业所常用的商务分析工具,熟悉企业真实的商务分析场景,加强团队合作能力。
这门课程通过小组作业形式,在两个月内共八次的课程中,与多个企业合作,由每组完成一项企业真实项目的课题研究,授课方式是由课程导师+企业导师+小组搭档互评的方式多方位来考核课程成绩,因此不论从时间,还是能力上都充满挑战,而我们也正是通过本次课程与SQLFlow结缘。
我们第一次听到SQLFlow,是在选择课题那天,由滴滴数据科学部门的高级数据科学家高梓尧老师在讲台上初次介绍,随后了解到该项目是蚂蚁金服和滴滴出行合作共建的开源项目。
高老师的介绍中提到“不用很懂编程就能完成人工智能项目”、“产品经理也可以直接建模完成产品需求”、“实现提取数据到建模的一体化”、“SQLFlow可以实现人工智能的大众化和普及化”等让人耳目一新的ideas,一下子就激发起我们的兴趣。
高梓尧老师
在清华经管的
“商务分析整合
实践”课堂上
介绍SQLFlow
在我们的印象中,建模是需要一定的AI知识门槛的,那么这个新产品到底是怎么做到的呢?SQL究竟是如何与机器学习联系在一起呢?仅使用SQL语句,不涉及编程代码真的可以完成机器学习模型的构建吗?为了解答我们内心的困惑,迅速组队报名了滴滴的SQLFlow项目组——基于SQLFlow的滴滴乘客活跃度因素探究。
Part 2
「 项目准备阶段 」
在课程助教的带领下,我们前往滴滴的新橙海大厦访问并启动了项目。
企业导师为我们介绍了项目相关的背景知识、需要的理论基础以及相关业务逻辑。其核心内容是:探究影响滴滴乘客活跃度的重要因素。通过对问题的分解,我们认为可以使用回归模型对乘客活跃度进行建模,通过模型解释,将得到的结论应用于实际的业务场景中,进而提出改进建议。
为了让大家从实际业务人员的角度出发,体验SQLFlow在实战中的应用便捷,因此这个项目的课程计划是,一开始将不会带着学员直接体验SQLFlow,而是先按照传统的机器学习方法完成项目,而后才开始体验SQLFlow在实战中的应用。
Part 3
「 项目过程 」
接下来就正式开始了项目工作。
传统的建模流程会从需求讨论出发,首先要明确要解决的问题,然后经过需求评审与方案制定,最终开发出符合业务需求的模型,这整个是一个循环迭代的过程,不同的需求侧重对应不同方案。
比如在这个乘客活跃度项目中,可以依据该项目的不同的特征及业务需求,从多个不同的角度定义乘客活跃度这个概念。而在模型设计与代码开发环节需要扎实的算法与代码功底,推进整个模型搭建。这一部分主要由技术部门实现,而一个很现实的问题是,分析师对问题的理解可能与上层需求不相符,一旦二者的思路不同频,会严重影响工作效率与质量。
传统建模流程
在企业导师的帮助和指导下,我们完成了用来提取数据SQL程序开发以及通过 SQL 程序提取数据。然后在原始数据集基础上,通过数据预处理、模型构建、参数调整、模型评估及预测等环节完成建模及重要影响因素的挖掘。
完成传统建模步骤的时候,已经是项目的第7天,企业导师终于带我们开始尝试使用SQLFlow来处理我们的任务。由于滴滴内部已经实现了在他们的数据平台中实现将SQLFlow和内部数据库系统连接通了,因此,我们在导师的带领下体验了在公司实战中如何使用SQLFlow的全流程。
第一步,是数据准备工作,在登陆其内部数据平台的notebook中,通过直接在notebook中编写SQL语句,从数据库中可以直接获取到初始数据。
而且滴滴内部已经实现了数据预处理功能的集成,因此,我们可以方便的调用到已有的方法进行数据清洗,与此同时,也支持Python自定义清洗功能的设定。
这一过程可以通过SQL实现也可以通过Python编码实现。整个设计较为灵活。相比较前面的传统方式的建模,该过程不再需要将数据下载到本地,提升了工作效率的同时节约了本地存储资源。
从企业的数据安全的角度来看,由于该过程没有将云端数据下载到本地电脑中,降低了数据泄露的可能,提升了数据安全性。
第二步,是数据建模的工作。通过扩展SQL语句从数据库中选出要参与训练的数据,训练相应机器学习模型。图2为利用训练集训练XGBoost模型的SQL语句。
SQL语句
实现XGBoost
模型建立
首先我们需要明确本次建模目标,是要选择一个具有解释性的模型来对我们的乘客活跃度训练数据集进行建模,其中目标字段是乘客活跃度,使用的是回归模型。
因此,在 SQL 语句中,通过SELECT子句选出训练数据集;通过TO TRAIN子句明确使用的模型,此处之所以选择XGBoost,这是SQLFlow中常用的具备可解释性的模型之一;
在LABEL子句中指出当前任务的目标列,即乘客活跃度;可以在WITH部分实现调参功能,其支持的参数和官方XGBoost的参数一致,可以根据本项目任务类型进行确定,可以通过“validation.select”引入验证集,用于验证当前模型的表现能力;INTO将训练好的模型保存在哪个数据表中。
第三步,对建立的模型进行解释。图4中展示的是通过 SHAP 工具对模型进行解释性分析的 SQL 语句。
04SQL语句实现
模型解释
在此阶段我们使用刚才训练好的模型对训练数据集进行解释,了解到哪些特征是影响乘客活跃度的主要因素。
因此,在SELECT子句中选在训练数据集作为输入;在TO EXPLAIN子句中设置我们用来解释的模型,即在第二步中训练好的模型;
然后在WITH子句中设置SHAP值画图的一些参数,该参数和SHAP官网的参数对应一致,因为我们项目的目标是识别乘客活跃度的影响因素。
因此,我们这里这里画图方式选取绘制摘要图“点图”,用以显示每个因素对乘客活跃度的影响分布,我们可以看到哪些特征对模型的预测结果有较大影响,哪些特征对预测结果影响较小。
第四步,对模型进一步解读分析。通过第三步的操作得到了解释模型SHAP图(如下图所示)。
乘客活跃度
SHAP解释图
接下来我们需要根据该结果并结合我们的业务逻辑发现影响乘客活跃度重要因子。
我们可以比较清晰的看出影响乘客活跃度的部分因素与直觉中预想的并不完全一致,诸如司机来电次数(driver_call_cnt)这类预先未料想到的体验因素,对乘客活跃度的影响较大,司机来电次数越多的乘客,模型倾向于预测其活跃度更高,反映出一定程度上的司乘沟通能够给乘客带来良好的乘车体验,能够正向影响乘客积极性。
除此之外,在这个过程中,我们在导师的带领下,学习到了SHAP中的因子重要性可以帮助进行特征筛选,进而构建表现更优业务解释能力更强的模型。
值得注意的是,通过SQLFlow简洁的语法得到的结果与使用 Python 代码进行传统机器学习建模得到的结果基本一致,而这个过程仅用了不到半天的时间。
Part 4
「 项目感受与思考 」
SQLFlow的官方介绍中强调了SQLFlow = SQL + AI,平台将数据库与AI引擎嵌合,极大降低了AI模型的使用门槛。在使用中,让我们感触最深的是SQLFlow的便捷与易操作性。
和我们最初拿到项目的状态相似,SQLFlow所面向的用户大多对于AI建模了解较少,即使有很多想法但无法通过代码或者模型进行落实,而SQLFlow的出现为有建模需求的所有业务人员(不管有没有编程技术)点亮一盏明灯,而用户如果能熟练使用SQL语句在数据库中进行数据检索与提取,那么用户就可在SQLFlow平台上,通过SQL语句完成实现了数据提取与AI模型建立。
在这次实践项目,我们在前期基于传统的机器方法进行建模,算下来从理论知识学习到实操数据处理和建模等环节,整个约占了6天的时间(整个课程一共8天的时间),这其中可以刨去我们理解该业务模型的背景逻辑之外所需要的时间约1-2天,即在学习理论知识、学习Python编程建模、学习机器学习模型基础知识等等一共花费了约5-6天的时间。
而我们在后期基于SQLFlow的建模仅仅花费半天左右的时间,完成了从了解SQLFlow的语法规则到基于我们的实际需求进行建模。
因此,我们很清楚地认识到SQLFlow对于需要在短时间内完成一个数据分析项目的分析师来说可以降低学习门槛,提高工作效率。
除此以外,SQL语法直观并且容易理解,极大地降低了AI算法编程的门槛,用户不需要是精通算法的数据科学家,甚至可以完全不擅长编程,或者对于编程初学者而言,书写代码时耗时耗力,存在篇幅较长又不一定功能正确的问题。
SQLFlow赋能于那些有着业务逻辑但是机器学习建模基础薄弱的人,通过简洁的SQL语法就帮助解决了建模这一痛点。此外,SQLFlow的应用降低了不同职能部门之间沟通的成本。
从学生的角度来看,我们在日常完成数据分析任务时所遇到的最大问题是怎样通过正确简明的代码完成复杂模型的构建。
这其中会遇到许多算法逻辑和代码语法问题,而解决这些问题需要补充数据结构等一系列算法编程知识,对于有时间限制的完整分析建模项目来说时间与学习成本很高。
而SQLFlow的出现则可以在模型构建上帮助我们简化了很多繁琐的代码过程,极大提高了工作效率。
Part 5
「 结语 」
机器学习建模对于编程初学者而言并非易事,从几乎零基础在两个月八节课的实践中完成一个数据分析项目也尤为挑战。
但是经过了传统模型的全程尝试,又体验了基于SQLFlow的建模流程,后者在代码简洁程序、流程一体化与消除产品和技术部门壁垒上有着极大优势,让我们体会到了技术创新赋能给用户带来的便利。
相信未来会有更多具备商业逻辑的业务人员能够借助SQLFlow这一平台来更直接地服务于客户,回归产品需求本质。
两个月八天项目课程的学习使我们收获颇丰,非常感谢清华经管学院能够提供这样一个宝贵的学习和实践平台,让我们能够参与切身体会到基于企业实际业务进行分析的过程,感谢本课程的指导老师徐心教授、刘登攀教授、王纯教授的帮助和支持。
同时,我们也由衷感谢滴滴出行公司提供的实践机会,感谢滴滴科技生态与发展部对本次项目的支持,感谢滴滴首席数据科学家谢梁老师,以及企业导师高梓尧老师、李群老师、朱文静老师的全程指导。
最后,由衷地祝愿SQLFlow能够拥有更加丰富的模型,更简洁的语法,能服务更多具备分析需求的业务专家,成为其常用的必备的数据分析工具。
——滴滴新橙海大厦的合作项目全体成员的合影
SQLFlow官网:http://sqlflow.org/
SQLFlow Github:https://github.com/sql-machine-learning/sqlflow
本项目参考官方案例:
https://github.com/sql-machine-learning/sqlflow/tree/develop/doc/tutorial/apsara2019/carprice_xgboost
滴滴科技合作
做学术界最值得信赖的合作伙伴