机器学习在呼叫中心的应用

在这篇文章中,将探讨如何利用简单的机器学习概念来丰富组织或客户组织中的呼叫中心/支持部门的活动。博客仅提供了一个洞见,即如何利用机器学习在当前环境中提供更好的服务时间,解决客户电话,并避免同一客户多次提出相同问题,从而增加问题积压数量。

数据科学工具与技术的使用

本博客主要关注数据科学工具和技术的使用,并假设读者对这些概念有所了解。在博客的第一部分,让看看如何开始创建一个有用的问题解决日志,这对于呼叫中心/支持部门的L1和L2(一级和二级)人员来说非常有用,因为他们需要在产品投入生产/上线环境后不断面对客户。

Python字典对象的力量

字典是一个无序、可变、索引的键值对集合。在Python中,字典是用花括号编写的。字典本身是可变的,所以可以随时添加、删除和更改条目。但是,由于条目是通过它们的键访问的,不能有两个具有相同键的条目。

以下是一些字典的例子:

empty_dictionary = {} person_age_dictionary = {'Mahesh': '21', 'Suresh': '34', 'Naresh': '16'} vehicle_names_dictionary = {'Tata': ('Nexson', 'Harrier'), 'Maruti': ('Ciaz', 'Alto', '800')}

要访问字典,可以使用.items()方法,例如:

person_age_dictionary.items() # 输出: dict_items([('Mahesh', '21'), ('Suresh', '34'), ('Naresh', '16')])

同样,为了分别访问键和值,可以利用.key()和.values()方法。还可以创建一个嵌套字典,如下所示:

nested = { 'Person_mobile': {'Mahesh': 'Samsung', 'Suresh': 'iPhone', 'Naresh': 'Nokia'}, 'mobile_model': {'Samsung': 'Note20', 'iPhone': '11 Pro', 'Nokia': '7.1'} }

在上面的代码中,nested['Person_mobile']['Mahesh']将返回'samsung',而nested['mobile_model']['Samsung']将返回'Note20'。要向字典添加/追加新元素,只需这样做:

person_age_dictionary['Ramesh'] = '40'

要从字典中删除特定元素,可以使用pop()方法,其中i是要删除的元素索引。.clear()方法可以移除所有元素。

在呼叫中心中应用Python字典

现在知道了Python字典对象的所有功能,让看看如何将这些功能应用到日常工作中,以发展组织的支持部门。

在这篇文章中,将使用私有数据,可以类似地使用与工作相关的数据。

对于这篇文章,将采用一个过去的银行领域产品(产品名称已隐藏),该产品在各种国有和私营银行上线。在进一步讨论之前,一个典型的支持中心/数据中心全天候运行,确保关键业务永不停止。

使用产品的客户如果遇到任何问题,他们会联系呼叫中心,根据问题的性质,需要在服务水平协议内提供解决方案。一旦产品稳定下来,大多数电话由L1(一级)团队处理,如果遇到需要修复的新问题,L2(二级团队)也会参与。

一个特定客户的历史问题数据集将包括以下详细信息:

  • 产品
  • 版本
  • 问题编号/工单编号
  • 问题描述
  • 优先级(1/2/3/4)- P1, P2电话需要立即解决,因为它们以某种方式停止了运营
  • 发布日期(何时给出修复)
  • 最终状态(开放/关闭/路线图/定制)
  • 行动(所有开放问题需要提及发布计划)
  • 公司备注(所有路线图问题的备注)
  • 测试日期(银行团队测试日期)
  • 银行评论(定制以及最终关闭/接受备注)
  • 解决方案(为解决问题所做的工作,在此提及)

这些数据可以从Siebel或Jira等工具中以Excel或CSV格式提取,这些工具是大多数公司现在使用的。

现在,将仅使用问题描述和解决方案列来创建所有必要的字典。

import csv reader = csv.reader(open('filename.csv', 'r')) d = {} for row in reader: k, v = row d[k] = v

客户-产品字典样本结构:

{C1:pv1, C2:pv2, C3:pv8, ... C10:pv20 -> cdict(客户名称 - 键,产品版本 - 值) (例如:旁遮普国家银行xyz产品版本1.0) 样本结果: { 'Punjab National Bank': 'xyz1.0', 'Union Bank of India': 'xyz2.0', 'Oriental Bank of Commerce': 'xyz2.5', 'ICICI Bank': 'xyz2.5', 'Axis Bank': 'xyz2.5', 'Bank of Baroda': 'xyz2.5' …… }

上述字典可以轻松创建,客户列表:C1, C2, C3 … C10和产品版本列表:pv1, pv2, pv25, pv3, pv8, pv20,这些将由支持团队提供。接下来,

# 创建版本-问题字典 verISS = {pv11: I1, pv2: I2 … pv20300: I300} 这里pv11意味着版本1和工单编号1,I1同样意味着提出的问题/工单 样本结果: { 'xyz2.0tkt1': '在销售税计划的税务收集中,用于捕获PAN/GIR编号/注册编号的字段?其他人只允许输入14位数字。而空间需要增加到16位数字。', 'xyz2.0tkt2': '为多个妻子提供平等的家庭养老金。', 'xyz1.0tkt3': '在查询转出时,系统显示错误:404 NOT FOUND;/xyz/jsp/bond/xyz_bond_transfer_out_selecting_jsp在该服务器上未找到' …… }

创建问题解决方案字典(参考上述代码)

# 产品问题解决方案字典样本结构 issRES = {I11: R1, I12: R2 ….. I20300: R300} 这里I11意味着版本1和工单编号1,R1同样意味着提供的问题解决方案 样本结果: { '在销售税计划的税务收集中,用于捕获PAN/GIR编号/注册编号的字段?其他人只允许输入14位数字。而空间需要增加到16位数字。': '在UAT环境中执行ABC脚本,并验证销售税是否可以接收16位数字。在生产环境中执行相同的操作。需要停止并重新启动服务。需要计划系统停机时间。', '为多个妻子提供平等的家庭养老金。': '目前,这需要在核心系统中作为一个变通方法来处理。XYZ将允许向一个配偶支付。由养老金领取者指定的份额需要在核心系统中作为两个贷记交易创建(或由养老金领取者指定)。多个配偶家庭养老金的功能将在xyz8.0中提供', '在查询转出时,系统显示错误:404 NOT FOUND;/xyz/jsp/bond/xyz_bond_transfer_out_selecting_jsp在该服务器上未找到': '从UAT环境复制xyz_bond_transfer_out_selecting_jsp到生产环境。请注意,需要重新启动树脂Web服务器。这可以在业务小时后执行,因为它只是一个查询屏幕' …… }

最后,将创建一个嵌套字典,如(结合所有客户/版本中所有问题的LTD - 生命至今)

custIR = {'pvdict': {'pv11': 'I1', 'pv12': 'I2' ...... 'pv20300': 'I300' } 'irdict': {'I11': 'R1', 'I12': 'R2' ........ 'I20300': 'R300'}}

这个字典现在包含了所有使用该产品的所有客户在所有地理位置、所有版本中的所有问题。现在,每当提出新的生产工单时,要检查是否已经存在解决方案,

tktdesc = custIR['verISS']['xyz2.0tkt1'] print(tktdesc) # 样本输出:‘在销售税计划的税务收集中,用于捕获PAN/GIR编号/注册编号的字段?其他人只允许输入14位数字。而空间需要增加到16位数字。’

b) tktres = custIR['issRES'][tktdesc]

# 样本输出: '在UAT环境中执行ABC脚本,并验证销售税是否可以接收16位数字。在生产环境中执行相同的操作。需要停止并重新启动服务。需要计划系统停机时间。'

现在,当提出新的工单时,为了检查是否已经为这个工单提供了解决方案,可以直接执行步骤b)。如果解决方案存在,即问题键存在,那么可以避免

同一个工单被多次提出,并且可以立即提供解决方案(非常少的时间)。现在可以将所有这些结合在一个简单的Python程序中(<10-12行代码),以提示工单描述作为字符串输入,并将其传递给customer_resolution_log字典以获得所需的输出。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485