航空公司情绪分析
航空公司情绪分析
随着业务的变化,他们的客户兴趣和情绪也会发生变化。企业可以在推出新产品或更改产品价格时使用情绪分析来跟踪客户情绪。跟踪情绪分析可以帮助企业改进产品和服务。 Twitter 是一种从客户那里收集情绪的好方法,因为该平台的创建是为了通过快速、频繁的消息交换来进行交流和保持联系。我的目标是收集各种航空公司的情绪分析。我将获得能够确定正面或负面情绪的预测词。我还将确定航空公司使用此模型的具体业务解决方案。
数据概览
这个 是我正在使用的数据集。这些数据是在 2015 年 2 月 23 日至 2015 年 2 月 22 日期间从 Twitter 上抓取的,并被分类为负面、正面或中性。我主要关注以下几个栏目:“airline”、“airline_sentiment”、“negativereason”、“text”。
我的完整代码 Github .
EDA
航空公司情绪分布
无花果,轴 **=** plt **.** 子图(图大小 **=** (15,10))
轴 **=** sns **.** 计数图(x **=** df["airline_sentiment"],
调色板 **=** '火箭',
命令 **=** df["airline_sentiment"] **.** 价值计数() **.** 指数,
数据 **=** df) **.** 设置(标题 **=** “航空公司的分布
情绪”)
查看航空公司情绪的分布,我可以看到大部分情绪是负面的,它是一个不平衡的数据集。
航空公司情绪占比
plt **.** rcParams["figure.figsize"] **=** (15,7)
plt **.** 参数 **.** 更新({'font.size': 15})
df **.** groupby('航空公司')['airline_sentiment'] **.** 价值计数(
标准化 **=真** ) **.** unstack('airline_sentiment') **.** 阴谋 **.** 酒吧(
堆叠的 **=真** , 地图 **=** “等离子体”)
plt **.** title("基于航空公司的航空公司情绪比例")
plt **.** 图例(本地 **=** “右上方”)
legend_properties **=** {'重量':'粗体'}
plt **.** 图例(道具 **=** 传奇属性)
plt **.** 节目()
美国航空公司的负面情绪比例最高。美国和联合航空公司的负面情绪也很高。维珍美国的积极情绪最少,但仅占数据的 3.4%。
负面情绪的负面原因
df2 **=** df [推文[“负面原因”] **!=** 《不能说》]
df2 **=** df2[[“航空公司”,“否定原因”]]
df2 **=** df2 **.** dropna(如何 **=** '任何')
df2 **=** df2 **.** groupby('airline')["negativereason"] **.** 价值计数(
) **.** 重命名('计数') **.** 重置索引() df2 **=** df2 **.** groupby('航空公司') **.** 头()
df2["百分比"] **=** df2["计数"] **/** df2 **.** groupby(["airline"])["count"] **.** 变换(“总和”)
df2 **.** 数据透视表(索引 **=** '航空公司',列 **=** '负面原因' ,
价值观 **=** '百分比') **.** 阴谋(
种类 **=** “酒吧”,堆叠 **=** **真的** , 地图 **=** “等离子体”)
plt **.** title("负面情绪的负面原因")
以上显示了客户对航空公司的负面体验的前五个原因。客户服务问题和航班延误/取消是航空公司的首要问题。
预测词
我找到了预测每家航空公司情绪的正面和负面预测词。
为了找到每家航空公司的预测词,我做了以下工作:
- 预处理文本。
- 使用 CountVectorizer 创建了一个术语文档矩阵。
- 在矩阵上训练了一个预测模型(逻辑回归)。
- 创建了单词的单位矩阵,它是与 CountVectorizer 具有相同词汇表的文档列表
- 使用训练好的分类器对这个矩阵进行预测,得到每个单词的概率。
- 按预测概率对行进行排序,并选择前 10 行和后 10 行。
以下是负面预测词。
团结的
一些美联航客户正在经历航班晚点和延误。有些人在到达目的地之前被困了几个小时。他们也无法联系客户服务来解决问题。一些客户被搁置了几个小时,但没有得到任何解决。在某些事件中,客户丢失了行李并且很难找回。
美国人
美国航空公司的客户正在经历无数航班延误和客户服务问题。一些客户抱怨由于航空公司缺乏沟通而导致航班晚点。有些人在预订和重新安排航班时遇到问题。客户也遇到过粗鲁的空乘人员。一些顾客的行李丢失了,很难找回。一些客户还经历过行李被盗的情况。
三角洲
达美客户主要遇到航班延误和取消以及客户服务问题。客户无法联系客户服务来解决他们的问题。有些人不得不多次打电话。客户的航班延误导致他们的转机航班出现问题。客户还丢失了难以找回的行李。
西南
西南航空公司的客户遇到了几个客户服务问题。许多客户在没有与某人联系的情况下联系客户服务。有些人被搁置了几分钟,无法及时与代表联系。客户还表示,如果他们必须更改预订、获得登机牌等,他们必须致电客户服务而不是在线进行。一些客户经历了航班延误和晚点。客户还遇到行李丢失和损坏的情况。
美国航空公司
西南航空公司的客户遇到了几个客户服务问题。许多客户在没有与某人联系的情况下联系客户服务。有些人被搁置了几分钟,无法及时与代表联系。客户还表示,如果他们必须更改预订、获得登机牌等,他们必须致电客户服务
维珍美国
全美航空客户体验不佳的原因主要是客户服务问题。客户抱怨无法与客户服务取得联系,并已被搁置数小时。一些客户也遇到了挂断电话。客户需要与某人进行沟通以满足各种需求,并且他们无法联系到客户服务代表。美国航空公司的客户也遇到行李丢失的情况。
文本预处理
需要执行以下操作来预处理文本。
-
小写文本
df[“文本”] = df[“文本”] . 字符串 . 降低()
-
删除标点符号和特殊字符
### 删除数字###
df[“文本”] = df[“文本”] . 字符串 . 替换('\d+', '', 正则表达式 =真 )### 删除标点符号###
定义 remove_punc(文本):
words_wo_punct = 回覆 . sub(r"[^A-Za-z0-9\s]+", "", 文本)
返回 words_wo_punctdf[“文本”] = df[“文本”] . 申请( 拉姆达 x:remove_punc(x)) ### 删除空格###
df[“文本”] = df[“文本”] . 字符串 . 跳闸()### 删除表情符号###
df[“文本”] = df[“文本”] . 申请( 拉姆达 x:表情符号 . 演示(x))
df[“文本”] . 头() -
Lemmatize text — 返回一个词根
### 字元化###
词形还原器 = WordNetLemmatizer()定义 word_lemmatizer(文本):
词汇表 = nltk . word_tokenize(文本)
lem_text = '' . 加入([lemmatizer . 词形还原 为了 w 在 词汇表])
返回 lem_textdf[“文本”] = df[“文本”] . 申请( 拉姆达 x: word_lemmatizer(x))
df . 文本 . 头() -
删除停用词(“this”、“is”等)和标记文本(将单词放入列表中)
### 删除停用词和标记###
定义 删除停用词(文本):
代币 = word_tokenize(文本)
英语停用词 = 停用词 . 单词('英语')
tokens_wo_stopwords = [吨 为了 吨 在 代币 如果 吨 不是 在 英语停用词]**返回** tokens_wo_stopwords
df[“文本”] = df[“文本”] . 申请( 拉姆达 x: remove_stopwords(str(x)))
df[“文本”] . 头()
矢量化
下一步是对文本进行矢量化。文本向量化是将文本转换为数字的过程。我测试了 CountVectorizer 和 TfidfVectorizer。
基于 ROC-AUC 分数,TfidfVectorizer 表现最好。 ROC 曲线(接收器操作特征曲线)可用于了解分类器的性能。 ROC-AUC 分数是对该曲线下面积的测量,并说明模型能够区分类别的程度。它给出了模型在预测不同业务场景中的负面情绪方面的表现。
型号选择
我通过测试三个模型开始了我的模型选择过程。我选择了朴素贝叶斯、随机森林和逻辑回归。
基于 GridScarchCV 中的“最佳参数”列来确定每个模型的最佳参数。
基于 ROC-AUC 得分,Logistic 回归 1 模型表现最好。我决定使用 n-gram 来测试模型。
Logistic Regression 1 模型仍然比 n-gram 模型表现更好。我将使用逻辑回归 1 模型。
查看上图,它显示了三个模型之间的 ROC-AUC 比较。您可以看到逻辑回归模型与其他两个模型相比要高一些。
阈值移动
阈值移动是一种改变分类问题阈值以提高模型性能的技术。阈值将根据特定的业务需求而变化。
以下是默认阈值 (0.50) 的指标。
商业案例 1: 追踪情绪分析
航空公司可以使用此模型来跟踪 Twitter 上的整体客户情绪。这可以帮助他们了解他们对公司的整体看法,如果他们可能需要解决的对航空公司的普遍负面情绪有任何上升,并且可以帮助他们更快地对这种情况做出反应。在这种情况下,将强调平衡的准确性,因为由于我们试图获得情绪的整体准确表示,因此所有类别都具有同等重要性。然后,经理们可以分析推文,并能够对公司需要改进的地方进行评估,这样他们就可以改善客户关系而不致亏本。
默认阈值为 0.5,但更改阈值可以得到更好的平衡准确度分数。具有 0.70 的阈值允许模型具有更高的平衡精度。平衡准确度是用于这种情况的一个很好的指标,因为数据是不平衡的,我们关心正类和负类。
下面是一个比较默认阈值和阈值 0.70 的表格。
商业案例 2:客户服务
航空公司还可以使用此模型来识别具有负面体验的客户,并将带有负面情绪的推文引导至适当的渠道。然后可以及时帮助客户,这可以改善航空公司的整体客户体验和对航空公司的看法。
实现这一点的一种方法是设置一个机器人来提醒客户,如果它是一种积极的情绪,比如“感谢您与我们一起飞行。我们期待在您的下一次旅行中见到您。”如果是负面情绪,机器人可以发送类似的推文说“很抱歉给您带来不满意的体验。能不能给我们发个信息。”然后,机器人可以向客户服务代表发送警报,并且可以向客户提供折扣或退款。
在这种情况下,假阴性意味着模型预测推文是正面的,但实际上是负面的。不利的一面是客户将无法获得适当的客户服务帮助,并且可能永远不会再乘坐特定航空公司的航班。这最终会导致航空公司赔钱。在这种情况下,误报意味着该模型预测了一条负面情绪推文,但它实际上是一条正面情绪推文。不利的一面是,机器人会响应具有积极体验的客户并提供折扣或退款,并导致客户服务代表在没有理由时与他们联系。这将导致公司亏损和浪费时间。
在这种情况下,由于低召回率和低精度都有明显的缺点,我们可以使用 F1 分数。我们希望找到尽可能多的负面情绪推文。如果推文是积极的情绪,我们也不需要机器人和客户服务代表浪费时间和金钱来响应客户并提供折扣。该指标可能会根据个别航空公司的特定情况而变化,在这种情况下,寻找更多负面情绪的客户或节省更多资金将变得更加重要。
默认阈值和优化的 F1 分数具有相似的指标。我们需要对误报进行成本分析,并将其与误报进行比较,以确定航空公司的下一个最佳步骤。
下面是一个比较默认阈值和阈值 0.664 的表格。
结论
跟踪客户情绪可以帮助企业改进产品和服务。该模型可用于基于特定业务需求的航空公司。
下一步将包括深入研究错误分类的原因以改进模型,因为某些推文可能带有讽刺意味。我还会从更长的时间范围内收集推文,因为收集的所有推文都来自 2015 年 2 月 16 日和 2015 年 2 月 24 日。
我的完整代码 Github .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明