产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

金融行业的数据挖掘之道

  • 2015-07-30
  • 本文字数:7610 字

    阅读完需:约 25 分钟

编者按

“大牛 V 课堂”是 Geekbang 核心栏目,通过邀约专业领域内的互联网顶级大牛分享专业知识和见解,让你了解专业领域内含金量最高的知识。关注geekbang01 公众号,遇见下一位大牛。

本文根据工商银行技术经理张佶在 ArchSummit 深圳 2015 大会的演讲整理而成,略有修改,感兴趣的读者可以关注 10 月份 QCon 上海 2015 大会的精彩内容。

工商银行文本挖掘技术应用探索分享

工商银行在大家传统的印象当中是一个体形非常庞大但是稳步前行的形象,但是近些年来在大数据的挑战下工商银行积极应对外界变化,做一些转型。其中一个举措就是通过数据应用驱动业务变革。今天我所分享的主题就是和银行的客户服务相关的,如何应用文本挖掘技术洞察客户的心声。

工商银行每天都在面临着来自各方的海量的客户心声,最近我们的 95588 接到这样一个来电,李先生做了一笔跨行汇款操作,对方还没有收到,他来询问什么时候可以到帐,这是一个典型的咨询。客户王先生是一个贵宾客户,他来电反映说在机场和火车站没有享受到工行提供的贵宾厅,他希望工行在以上场所做明显提示。还有张小姐到一个支行网点做存款业务,发现里面柜员服务态度不耐烦,让她很不满意,她要求把这个情况记录下来做一个反映,这是一个典型的投诉。

除了官方服务渠道之外,现在客户越来越希望通过互联网社交网络的方式表达他们的心声,并探讨热点话题。最近我们监测到这样一个热点话题的讨论,有人说“大家看清楚了,针孔摄像头就是这样装进 ATM 机偷看你的密码的。”这是一个风险事件,工商银行需要做到及时了解和掌握。

同时在互联网的新闻网站上最近也有一些报道,有的市民在便利店蹭 WiFi,上了两个小时网,他的银行卡就被盗刷了,这个又是怎么办到的,工商银行需要对这些事件做到了解掌控,并且制定对应的措施。以上这些信息都是以文本方式存在的,我们可以通过文本挖掘的方法了解用户在说什么,挖掘出对我们有价值的信息,这对工商银行客户服务的提升会有很大的帮助。

传统客户服务分析流程

首先我们了解一下传统银行客户服务的分析流程。当我们的客户拨打 95588 热线电话之后,客服座席会把他说的话和要求记录下来,存到客户之声系统之中,系统会对结构化的部分进行分析,比如投诉的数量、客户对我们满意度的打分或问题处理时效。

对于其中非结构化数据的部分,就是客户说了什么当时没办法做自动分析,这只能由分析人员逐个来看,但毕竟数量比较多,人工阅读做不到非常全面,只能做抽查,大概看看客户在说什么。我们监测分析人员同时还会去登录一些新闻网站了解一下近期有没有跟工行相关的事情发生,然后他会把这个情况记录下来,人工编写这么一个服务的报告。当时对我们的社交媒体是没有办法做到关注的。

结合文本挖掘的客户服务分析流程

在结合了文本挖掘技术之后有了一些流程变化,不仅对结构化数据做分析,同时也能够从客户反馈的文本当中提取出客户的热点意见,再把热点去和结构化数据做关联分析,就能得到更加丰富的分析场景,这在后面会有一个详细的介绍。

同时,我们又新建了一套互联网的监测分析系统,能够对互联网上的金融网站和社交媒体网站做到自动的监控和分析,当然有些重要的事情发生的时候可以自动的形成监测报告。

从刚才服务流程的演变可以看到有了一些挖掘的功能,首先从技术来说丰富了分析的手段,原来只能对结构化进行分析,现在能够对文本数据客户所说的内容进行分析,然后扩大了分析的范围,原来只能关注到工商银行官方服务渠道所记录下来的信息,现在能够关注到在互联网上所传播的信息。第三点是提升了分析的效率,原来需要员工逐条阅读工单,现在机器自动阅读。

客户意见挖掘业务价值

这些技术提升点之后就能在文本反馈当中发现客户的热点意见集中在哪些方面,如果我们能够对这些客户所反映的共性问题主动发起一些措施,优化我们的业务流程,可以提升我们的客户满意度和客户忠诚度,而另一方面这些来电的投诉量会进一步的减少,也就从另一方面降低我们的服务成本,减少了二次被动的服务投入。

案例分析
今天想分享两个具体的案例,一个是对 95588 客户服务的一些工单如何做到客户意见挖掘,这个是从无到有的设计和探索的全过程;第二个案例当中会介绍一下如何聆听在互联网上传播的客户的心声。

客户意见发掘——业务目标

通过 95588 服务热线记录大量的客户反馈的文本,拿到一堆文本之后怎么切入客户的意见挖掘呢?最重要的是先对客户做分类,结合业务的处理流程设计这么一套适用于银行客户意见的分类体系,当有投诉过来的时候就知道他所说的是关于自助服务的还是银行卡、还是关于网点服务的。这样我们就能分析各个类别里不同的发展趋势并且进行有效处理。

但有了意见分类还不够,我们知道哪一类的意见是最多的,我们尝试性做热词分析,文本由大量的词汇构成的,我们想看一下在这么多的客户反馈文本当中大家提到哪些词汇,从中提取客户说的最多的、最频繁使用的词汇,用可视化的方式生成一个词语。


从这个图上我们就能看到有一些效果,包括像工作人员、机具、查询、词汇等等凸显出来。在这个图上所反应的信息不够精准,我们只知道有一些关于工作人员的评价或描述,但是不知道工作人员到底出现什么问题,我们的自助机具到底是故障比较多还是客户不会用。同时这个图当中还存在多词疑义的问题,工作人员和柜员两个词说的是类似的问题,这对我们造成干扰。

如何精准概括客户意见?我们提出统一的、概括的用户观点的表达方式,就是对象、属性、评价三元组的形式。下面这个例子有四句话:柜员说话口气非常差。今天在柜台办业务,里面的人态度很差;柜员脾气不好,柜员语气很不耐烦。用我们的属性评价方式概括就是“柜员态度不好”。

有了这样的方式之后对刚才的词云做分析,发现刚才的词云已经演变成了意见云,这些意见都是指向非常明确的比较精准的,比如说网银跨行汇款不成功,短信余额变动不能接收,网点效率低,网点排队时间过长,相信大家对这些问题也并不陌生,在有了这个图之后我们的分析师就能够比较直观的了解最需要去改进的问题,客户的意见都聚集在哪些方面。

客户意见挖掘——模型建立

有了刚才的这些设计方式之后,我们可以怎么样选择最贴合我们业务场景的分析方法,刚才我们首先提到了需要对文本做自动分类,我们最容易想到的就是朴素贝叶斯,它可以计算一篇文章属于哪个类别的概率最大,可以完成分类。

但是进行实际分析和尝试的过程当中发现这样一个典型的算法,在我们的实际业务场景上其实并不是特别的适用,首先我们缺少训练数据,因为我们这一套意见类别的分类体系是新建的,历史上并没有积累好数据,如果我们重新去标注呢,这些意见类别又特别多,有的类别层次又比较深,所以很难在比较短的时间内完成高质量的标注。

其次,朴素贝叶斯假设的就是文本当中的词汇与词汇之间是相互独立的,跟我们的业务也不相符合,比如之前提到的“态度不好”这两个词基本是会关联出现的,不会单独分开出现,如果单独统计也就失去了意义。

所以我们发现当我们的业务描述语言和业务描述逻辑非常复杂的时候,统计的准确度都不会太高。刚才又提到需要自动提取对象属性评价用户观点,一开始用户的观点是在讨论一个个话题,是不是可以用基于 LDA 这样的模型完成话题的提取呢?

我们也做一些尝试,最后发现像 LDA 提取出来的话题有时候过粗,不适合我们的具体业务,比如我们想要的是“柜员态度不好”,最后只能精确到柜员描述的层面,作为一个非精度的模型比较难以调优,有某几个话题质量不是太高甚至存在重复话题的时候,没有办法做针对性的调优,最重要的一点还是它的可警示性比较差,分析出一些主题之后没有办法把话题归纳成我们所需要的对象属性的评价形式。

既然我们尝试过一些典型的传统方法不太适用的时候,接下来怎么办?我们选择了本体模型,从具体的实际业务出发建立这样一套适用于业务的一套本体体系,首先介绍一下本体是什么概念?

本体最早是一个哲学概念,在哲学层面指的是现实世界中事物的具体存在,比如我手上拿的话筒具体的事物存在就是本体,比如我们还可以称它话筒或麦克风,甚至可以拿一张话筒的图片来描述它。

把本体概念引申到信息科学的语义层面就变成知识科学体系。首先我们用本体表示多层次的业务分类或具体的业务目标,本体业务可以由要素和概念两个不同的层面构成,要素是业务层次,一般描述业务对象或业务属性,这跟我们的专业领域相关,需要专家来维护,在银行领域就需要维护像“信用卡”和“借记卡”这样的业务要素。

概念是语言层次,描述基础的语言概念,比如说我们对时间怎么描述、对地点怎么描述,包括人的情绪或者人对事物的评价等等,这些语言概念由于基础的资源,它跟专业的业务领域是不相关的,这就可以由我们的技术人员协助业务专家做一些收集和积累,比如说常见的一些语言概念,比如对于“不及时”怎么说,对于“异常”有哪些说法。

在我们的设计当中把业务层次和语言层次进行了相互分离,这样的事情就有两方面的好处,我们的业务专家就可以专注在业务要素的维护上,而不需要再去关注语言上的表达细节。另外,这些语言概念有些是不相关的,就有比较高的附庸性。

本体模型的示例和难点

具体模型示例,我们建立的银行客户建立本体体系,跟刚才提到的客户分类体系是完全一致的,这里面有一个本体叫“工作人员”,它又可以和对象要素和属性要素进行关联,对象要素包括柜员、保安、保洁、大堂经理,属性要素包括态度、业务熟练度,本体和要素又同时可以从第三个层次“概念”里相互关联,概念像好、快、热情、熟练、故障。

通过对象要素、属性要素和评价概念这三者进行相互连接和组合就能够构成我们对工作人员这个本体挖掘表达式的设置,从中得到我们想要的三因素,比如像柜员态度好、大堂经理业务熟练,同时我们只要知道这个观点是在描述柜员或者保安,能够把这样一个情况给分类到工作人员这个类别下。

刚才介绍到这里的时候大家会感受到一个本体模型明显的问题和难点,这些本体还是依赖于人工梳理,人工很难,我们采用的是基于深度学习的本体半自动构建方式,其中一个方式就是对文本当中邻近词汇做剪辑,我们具体使用的是 Google 开源的 Word2Vec 词向量模型。

这些词向量具有一个特点,它的纬度是固定的,避免了传统空间向量模型当中维数灾难的问题。由于我们已经用词汇向量表示一个词汇的含义,向量之间又是可以加起来的,所以我们在大量文本的背后可以分析出潜在的语言学的规律,最典型的例子是国王 - 皇后等于男人 - 女人。

在实际运用中是不是有比较好的表现呢?我们做了一些尝试,最后有一些定律定义词汇之间语义的相关性。从这个例子当中看到效果还是不错,对 ATM 这个语义最相近的词汇有 ATM 机、取款机、自动取款机、柜员机、自助机。还有“好”这个词语义最相近的比如温柔、利索、忙前忙后、谦虚、和蔼可亲。可以看到 Word2Vec 是有一个比较好的表现。

进一步看一下 Word2Vec 能不能帮助我们的业务要素找到最靠谱的平台概念。做一个尝试,有三个比较常用的业务对象,包括短信、柜员和保险,设置了一组评价概念的词汇,通过 Word2Vec 找到了这些概念和评价词汇之间的相似度,标红的部分是明显高于其它的连接方式的。

能够看到短信连接到漏发、错发、诈骗,柜员可以连接到怠慢、欺骗、误导,保险可以连接到欺骗、诈骗和误导,这确实能够有效帮助我们辅助人工做梳理,缩短整个模型构建的周期。

客户意见挖掘——实施效果

既然有了客户意见表示方式,接下来应用于什么业务场景当中。首先把客户个体意见和客户星级数据做关联,这样就能看到不同星级之间的客户关心的不同问题在哪里,其中我们看到像七星级客户和三星级客户关注的问题有非常大的差异,其中还有五星级客户甚至成为一个孤岛,和其它类型的客户关注的点都是完全不同的,从中我们可以制定针对于高星级客户的差异化的服务策略的提升。

第二个问题是关联的问题,比如 U 盾的问题,通过关联分析就知道哪个品牌的 U 盾关联到哪个问题是最多的,形成关联网络,从这个图上能够针对性的制定产品改进的措施。

第三个例子是连续投诉分析,同一个客户在很短的时间内针对同一个问题反复投诉的情况,有这个分析结果以后有两个方面可以利用,首先我们可以知道哪些问题是客户最不能容忍的,一旦没有给他很好的得到解决的话他会反复投诉,增加我们的投诉量。

另一方面也能够知道工商银行在哪些问题上的解决是比较欠缺的,由于工商银行没有到位导致客户进一步的投诉。还可以看到客户意见地域上的分布,随着时间的变化这些意见会得到什么样的趋势性的发展。把这些纬度进行相互结合可以得到更加灵活的分析结果,比如说在上半年上海高星级客户,增长最快的客户意见有哪些。

如何聆听互联网客户的心声

接下来讲讲如何聆听互联网客户的心声。工商银行非常关注于行内官方途径的反馈,也特别注意互联网上客户传播的心声,我们建立了互联网客户心声聆听系统,能够覆盖到互联网上各类新闻网站和社交网络渠道,对我们所关注的信息做自动化收集,在我们得到信息之后会做多纬度的分类,看这些信息都是关于什么银行的,提到了哪一类业务和产品,打上什么标签,完成打标签之后跟行内的信息也做一个更好的关联。

由于我们主要关注互联网上所关注的投诉,在大量信息当中识别负面评价,当一个比较重大的事件发生的时候会有一个传播特征的分析,去看这个事件首发在什么网站,什么时候发生的,经过什么样的传播途径和转载关系之后达到爆发的顶峰,它又是怎么样慢慢消退的,最后在一些重要事情发生的时候可以做及时预警。

由于我们所获取到的信息都是来源于互联网,有一个最大的特点,就是价值信息利用率特别低,困扰我们最大的问题是怎么在海量数据中筛选出最有价值的信息。

我们用一些比较精准的关键词获取信息,比如说工行、工商银行、ICBC、95588 等等,但获取回来的信息仍然存在大量垃圾信息,包括一些广告、寻人寻物和招聘信息等等,垃圾信息占了 80% 以上的数据量,真正有用的信息,我们所需要的投诉、抱怨或者建议最多就是 20% 的量,怎么样通过自动化的方式把垃圾信息过滤掉。

我们也尝试一些简单粗暴的方法,比如设置一些垃圾信息词汇的过滤,像是积分有优惠,刷卡有惊喜这样的词汇,大概能过滤掉三分之一的垃圾信息,但毕竟覆盖是不全面的,这时候我们又使用这个方法,在这个场景下和刚才所说的场景就有所区别,现在变成了二次分类,我们在二次分类上做一些数据的交付是比较能够容易实现的。

同时用朴素贝叶斯过滤一些垃圾邮件,最后发现朴素贝叶斯在这个方面是比较好的,广告词汇和我们有用的词汇之间区分度也比较明显。

完成了过滤垃圾信息之后,我们所看到的信息看上去比较干净,但还是不能直接提供给分析师直接使用,因为我们采集到的数据来自于互联网上的各个渠道,同一个事件在不同渠道有不同的报道,甚至同一个事件在社交网站上还有很多的评论,我们怎么样把同一个事件、同一个报道聚合到一起呢?

首先我们想到了 K-means 的方法,但有一些局限性,比如 K 值是固定的,但是我不可能知道一堆新闻当中存在多少话题和多少事件,同时这些事件也是不断地在成长,新的话题不断地在发生,这个时候我们引入了新的思想叫“中国餐馆过程”进行优化。

这个可能是外国人提出来的,在外国人眼里中国人吃饭的时候喜欢跟中国人扎堆,当我们进入中国餐馆的时候第一人坐在一张桌子上,第二个人进来的时候会看跟第一个人的熟识程度怎么样,如果认识他就坐到第一张桌子上吃饭,如果不认识就新开一张桌子自己一个人坐在那里吃饭,随着大量顾客逐步进入到餐馆之后,通过这样的原则坐定之后,自然而然的完成了聚类的过程,每张桌子上坐的是熟识的人,这跟我们是类似的。

新闻媒体跟社交媒体会做区分处理,主要是因为这两个数据之间的措词有比较大的区分,比如说在新闻媒体上的措词相对比较正规、严谨,在社交媒体上的措词比较随意一些,所以我们会对一个批次的数据首先做一个新闻媒体上的聚类,然后完成社交媒体的聚类。

第三步看社交媒体聚合出来的话题有没有针对性的评论某个新闻事件,如果有第三类就把它划过去,如果没有它自己单独成为一个话题。通过这样的方式,我们的信息可以提供给分析师做查询,他们查看各自领域当中发生的重要事件。

但是这个时候业务方面给我们提出更加高的要求,能不能在重要事件发生的时候做到自动的提示预警,这就带来一个问题,我们怎么判断一个信息是重要还是一般呢?首先根据人的经验来看一下,影响一件事情成为重要一般有这样一些分析因素。

首先是涉及的机构,如果一个事件跟工行相关比跟同业其它银行相关更重要一些;二是带有情感色彩;三是转载数量;四是转载媒体数;五是来源渠道,来源于新闻网站的比来源于社交媒体的重要,因为新闻网站上的渠道比较正规正式,社交媒体上可能有大家随口说的小道消息;六是有没有关联到我们的业务类型。

我们选择了逻辑回归的模型,通过历史上发生的重要事件的学习就可以自动来识别这些即将发生的重要的信息。当我们识别出重要信息之后,除了完成提示预警之外,还可以提供分析师做查询的时候按重要度排序的方式,重要的信息可以提到前面来,每天我们可以把当天的所有信息自动生成监测日报提供给分析师做参考。

一些体会

文本领域挖掘过程中我们有一些具体的体会,比如首先选择贴合业务算法的模型,通过刚才的介绍也可以看到在文本挖掘领域很多的分析模型都有一个特点,就是可复印性比较低,往往在一个领域比较有效的方法换个领域就不太有效了,甚至换一批数据准确性就有很大的影响。

所以我们在选择一些方法的时候需要针对具体的业务特征和具体业务的特色多做一些尝试和实验,通过实验的数据来说话,我们到底选择一个什么样的比较合适的模型。

第二点是需要去注重语义资源库的建设,语义资源库扮演重要的角色,虽然我们可以在互联网上获取重要的资源,比如说中文单词的词库或情感辞典的词库,但是这些词库往往不能直接产生比较好的效果,因为这些词库只包含大众的词汇,这需要结合我们自身专业的特色。

比如说金融行业就要不断地整理梳理自身所需要的特色词汇,这个可能是需要投入比较大的精力的,我们在这个过程中也是花费了不少的精力,最终才能够完成我们所需要的分析的效果。

第三个问题,尤其是针对传统行业来说的,因为大数据商业的概念其实已经被炒的像一个神话一样,大家都在说,其实也很少人知道应该怎么去做,经常我们得到一些需求都是特别宏观、特别大的,其实都不太容易落地,从我们实际落地的角度来看,大数据要在传统行业有效的落地还是要从解决小问题开始。

总结

最后做一个总结。今天我们讨论了两个话题,首先对于 95588 客户意见挖掘设置了“对象 - 属性 - 评价”这样的方式,然后建立本体模型,针对本体模型我们设计了词向量辅助建模。第二个话题在互联网客户心声聆听当中,我们用朴素贝叶斯完成垃圾信息过滤,然后完成跨渠道事件聚类,最后完成重要信息的识别。

作者的微信公众号“老崔瞎编”,关注 IT 趋势,承载前沿、深入、有温度的内容。感兴趣的读者可以搜索 ID:laocuixiabian,或者扫描下方二维码加关注。

2015-07-30 03:095913
用户头像

发布了 501 篇内容, 共 255.9 次阅读, 收获喜欢 60 次。

关注

评论

发布
暂无评论
发现更多内容

Servlet规范中的监听器-Listener

楠羽

Servlet 笔记 10月月更

React性能优化的8种方式

xiaofeng

React

一Go到底】第四天---数据类型

指剑

Go golang 10月月更

C++学习---_IO_new_fdopen函数原理分析学习

桑榆

c++ 源码分析 10月月更

【C语言难点突破】指针入门讲解

Geek_65222d

10月月更

微服务通信

穿过生命散发芬芳

微服务 10月月更

硬核好文!网络拓扑类型:总线、环形、星形、网状、树形、点对点、混合

wljslmz

网络技术 网络拓扑 10月月更

Vue3入门指北(八)v-model

Augus

Vue3 10月月更

【牛客刷题-算法】NC25 删除有序链表中重复的元素-I

清风莫追

算法 链表 10月月更

什么是 Python 垃圾回收机制中的引用计数

宇宙之一粟

Python 垃圾回收机制 引用计数 10月月更

恼人的网络时延

agnostic

网络时延

深度剖析React懒加载原理

xiaofeng

React

最长回文串

掘金安东尼

10月月更 算法、

书单推荐|宅家不动过国庆,好书相伴不寂寞

图灵社区

书单 国庆节

React组件复用的技巧

夏天的味道123

React

深入了解计算机语言

邱学喆

响应式编程 C语言 汇编 对象编程 C++

开发者有话说|我何以坚持编程25年?

个人成长

【愚公系列】2022年10月 Go教学课程 018-分支结构之switch

愚公搬代码

10月月更

Qt|双缓存机制

中国好公民st

c++ qt 10月月更

ESP32-C3 学习测试 蓝牙 篇(六、添加 Service)

矜辰所致

service 蓝牙 ESP32-C3 10月月更

InetAddress.getLocalHost() 执行很慢?

xiaoxi666

网络 网络库

基于IDE和dlv远程调试Kubernetes组件

琦彦

Go Kubernetes 调试 10月月更 delve

2022-10-04:以下go语言代码输出什么?A:{123} main.T{x:123} B:{123} T{x:123} C:boo boo D:boo main.T{x:123}。 packag

福大大架构师每日一题

golang 福大大 选择题

书单推荐|宅家不动过国庆,好书相伴不寂寞

图灵教育

书单 国庆节

【牛客刷题-算法】NC16 对称的二叉树

清风莫追

算法 二叉树 10月月更

【牛客刷题-算法】NC22 合并两个有序的数组

清风莫追

算法 数组 10月月更

面向对象究竟是什么鬼?该如何理解?

乌龟哥哥

10月月更

80%的前端开发都答不上来的js异步面试题

loveX001

JavaScript

React中常见的TypeScript定义实战

xiaofeng

React

Python应用之反转字符串

梦笔生花

10月月更 反向字符串输出 函数与表达式

网络请求模块(2)

张立梵

Python. 爬虫必备知识讲解 10月月更

金融行业的数据挖掘之道_大数据_崔康_InfoQ精选文章