市民热线智能化系统中大数据技术的应用探析
作者: 冯景森
摘要:大数据技术的不断发展和广泛应用,正在对各个领域的发展产生着深刻的影响。为了更准确及时地了解市民的诉求,需要提高市民热线系统效率,提高系统的服务质量,可以利用大数据的技术,让系统更加快捷地辅助话务人员来处理市民诉求。本文通过市民热线系统来介绍大数据技术在软件系统中的应用,来分析有关大数据模型的构建方法,从而更深的理解大数据技术,为应用大数据的信息化系统建设提供更多的参考案例。
关键词:大数据;市民热线系统;智能推荐;Python
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2024)17-0082-03 开放科学(资源服务)标识码(OSID) :
0 引言
市民热线系统也是指“12345 市长热线电话平台”,是用来帮助诉求人解决生活、生产中所遇困难和问题,是市委、市政府关注民生、倾听民意的平台。市民通过市民热线反馈的数据,或者微信公众号、微博等多渠道反馈数据,系统将转入为文本类型的工单数据,对于这些数据具备:1) 话务量大,数据沉积丰富;2) 信息来源渠道多;3) 数据复杂,数据维度多等特点。但同时这些数据具有价值高的特点,因为该热线是全市人民反馈日常问题的最直接窗口,其所收集到的问题也是市民日常所最关心的事件,因此其数据所包含的价值非常高,是各级领导有效了解市民心声的重要途径。因此需要采用大数据手段对工单数据进行深度分析挖掘,协助坐席工作人员更加高效地处理工单,以便及时准确地向市领导及各部门提供分析结果,为城市管理决策提供辅助支撑。
1 市民热线系统的大数据技术应用场景介绍
由于市民热线系统所包含的工作职责复杂,需处理工单数量多、内容杂,在实际的业务工作中,严重依赖业务人员以人工的方式处理各类工单,造成业务人员培训成本高、效率低、处置标准不一致等问题。针对于以上问题,我们对已有系统进行升级改造,对原有单一的工单管理系统升级为智能受理子系统、智能派单子系统,智能回访子系统及领导驾驶舱系统等。结构如图1所示。
1.1 智能受理子系统
在智能受理子系统中,实现坐席员接听市民电话时智能填写工单的相关功能。通过智能地址校准、智能问题分类推荐、智能承办单位推荐与历史工单查询等功能,为话务人员进行服务引导,方便坐席准确受理、填报诉求[2]。在此子系统中,我们建立了“问题分类推荐”模型,主要是通过KMeans聚类分析方法,对已有的历史工单自动进行语义分析并归类,该模型具备学习特性,可通过循环训练实现对工单的理解和分析。从而对工单作出准确的推断,实现对工单不同维度的归类。
1.2 智能派单子系统
在该子系统中,实现工单承办单位智能推荐功能,结合历史工单分析、诉求分类类别、诉求问题点位等关键信息内容系统自动提示推荐承办单位。该功能实现基于系统建立的“承办单位匹配模型”,可智能推荐高匹配度的处置部门,协助区中心派单人员进行高效、精准地派单。
1.3 智能回访子系统
智能回访子系统主要功能包括多渠道回访功能、自动回访功能等。实现回访标准管理功能,对回访内容进行设定,如办事人员是否与您联系、是否解决问题、您是否满意等;实现回访渠道管理功能,支持语音回访、短信回访、微信回访等回访渠道配置功能;实现自动回访管理功能,支持将已办结工单自动设置回访次数、回访时间,到指定时间自动发起回访。实现回访分派管理功能,支撑按办结时间、按承办单位、按来源渠道、按问题分类进行回访任务的分派,提高回访效率,增强群众满意度。该系统中建立了“回访内容推荐”模型,此模型根据诉求内容来自动抽取时间、关键词等,组成言简意赅的回访内容,根据工单来源途径对诉求人进行相应渠道的回访,通过模型推荐的回访内容,能让诉求人准确地定位到相应的诉求工单。
1.4 领导驾驶舱系统
以图表结合的形式清晰地、生动直观地展示各种指标,展示选定时间段内的市民反映的各类问题、数量、区域等。通过多维度、多视角地分析数据,形象化、直观化、具体化实时反映市民的各种问题,辅助领导决策支持。领导驾驶舱的各项展示指标能够通过系统的计算,让在线流动的数据反映真实问题,为各级领导的决策指挥提供准确的依据[3]。
2 市民热线系统应用大数据技术的实现过程
2.1 大数据分析系统开发环境
该系统采用Python编程语言,选用Python 3.11版本进行开发;借助VS code开发工具,提供代码编写、调试、测试等功能;利用Pandas数据处理工具,进行数据清洗、处理和分析;选用Git版本控制系统,用于管理和追踪代码版本;利用conda虚拟环境,管理Python 环境和包。
2.2 Flask 框架
Flask的设计理念是简单、轻量级和灵活,它提供了一些基本的功能和结构,但留下了足够的自由度,使开发者可以根据自己的需求进行定制。程序员可以使用Python语言的Flask框架快速实现一个Web服务。各模块以Flask/Python的设计理念,使用Flask提供的蓝图(Blueprints)来组织,便于将来改进和扩展[4]。在Flask框架中,路由用于将请求的URL映射到相应的视图函数,从而实现不同URL对应不同的处理逻辑。Flask 框架使用@app.route()装饰器来定义路由,其中参数为要映射的URL路径。Flask框架还支持通过request对象来获取请求参数、请求头、请求方法等信息,从而实现更复杂的请求处理。在市民热线系统的大数据处理的子系统中,需要根据请求内容提供相应的数据处理结果,应用到的场景业务并不是特别复杂,所以选用Flask这一轻量级框架,运用起来比较合适。
2.3 市民热线系统的“问题分类推荐”模型举例说明
市民热线系统的“问题分类推荐”模型的数据处理过程遵循大数据处理的几个步骤:1) 数据收集;2) 数据准备;3) 数据分析;4) 数据展现。以下作步骤详解。
2.3.1 数据收集
收集数据是训练模型的第一步,这一步需要收集与之相关的大量的多样的数据,数据的质量和多样性对训练的效果有至关重要的作用。在“问题分类推荐”模型中,我们将话务系统的历史工单数据的工单内容和对应的问题分类从线上库导出,然后作为该模型的训练数据源,主要为文本数据。这些文本在导出的过程中,依照要求筛选出高价值的字段信息,以保证数据的高价值的性质。这样,数据收集步骤就完成了。
2.3.2 数据准备
在将数据输入模型进行训练之前,一般需要对收集到的数据进行预处理,包括数据清洗,噪声去除等操作,以提高模型训练的准确性。大数据技术通过数据清洗、数据预处理和数据挖掘等技术,可以处理这些复杂的数据,并从中挖掘出有价值的信息[5]。此模型的开发中导入数据后,使用处理中文文本的jieba 库,来进行分词、去除停用词等操作,以此来根据需求来清洗处理历史工单数据,Python代码示例如下:
import jieba
import pandas as pd
# 读取历史数据
history_tickets = pd. read_csv(′historical_orders.csv′)
# 定义停用词列表
stop_words = [′的′, ′是′, ′和′, ′了′, ′有′, ′中′]
# 定义一个函数,用于去除停用词以此进行数据清洗
def preprocess_text_jieba(text):
# 分词
tokens = jieba.cut(text)
# 去除停用词
tokens = [token for token in tokens if token not in stop_words]
return tokens
# 提取问题文本和分类标签
questions = [ticket["question"] for ticket in his⁃tory_tickets]
categories = [ticket["category"] for ticket in his⁃tory_tickets]
# 对问题进行分词和去停用词处理:
all_questions = [preprocess_text_jieba(ticket["ques⁃tion"]) for ticket in history_tickets]
以上代码就清洗好了训练“问题分类推荐”模型的数据源。
2.3.3 数据分析
数据分析是该模型开发的重要环节,包括统计分析、数据挖掘和机器学习等技术。统计分析帮助揭示数据的分布、关联和趋势;数据挖掘可以从数据中发现隐藏的模式和关联规则;机器学习可以通过训练模型来预测未来的趋势和行为。首先将清洗过的数据源进行向量化表示,同时使用Python的Sklearn机器学习工具包构建TF-IDF向量矩阵[6]。然后根据数据特征,应用KMeans聚类方法,对数据进行分类。KMeans 聚类方法的原理是最小化每个数据点到其所属聚类的质心的平方距离之和。其中,TF-IDF,即词频-逆文档频率(Term Frequency-Inverse Document Fre⁃quency) ,是一种用于信息检索与文本挖掘的常用加权技术[7]。它通过统计一个词在文档中的出现次数以及在整个文档集合中的出现情况,来评估一个词对于一个文档集或一个语料库中的其中一份文件的重要程度。TF-IDF向量矩阵是一种将文本数据转换为数值形式的方法,以便可以使用机器学习算法进行处理。在TF-IDF向量矩阵中,每个文档都被表示为一个向量,向量的每个维度对应于文档集合中的一个词。向量的值通常是该词在文档中的TF-IDF值。
下面是实现该过程的Python代码示例:
from sklearn. feature_extraction. text import Tfidf⁃Vectorizer
from sklearn.cluster import KMeans
# 使用 TF-IDF 进行特征提取
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(questions)
# 使用 K-means 算法进行聚类
kmeans = KMeans(n_clusters=len(set(categories)))
kmeans.fit(X)
# 指定的问题
specified_question = "网络连接"
# 使用指定问题进行预测
specified_question_vector = vectorizer. transform([specified_question])
predicted_cluster = kmeans.predict(specified_ques⁃tion_vector)[0]
# 根据预测结果推荐问题分类
recommended_categories = [categories[i] for i, label in enumerate(kmeans.labels_) if label == predicted_clus⁃ter]
# 打印指定问题的推荐出的问题分类名称
print("推荐的问题分类是:", recommended_catego⁃ries)