本文约2700字,建议阅读5分钟本文借助的数学模型为贝叶斯网络模型。
当下的舆情事件很多,很多舆情还会反转,弄得我们哭笑不得,感觉自己像个傻子。下面是一些舆论反转事件(结果来自于360AI搜索):
之前我写过一篇文章从心理学和传播的角度探讨“我们为什么会被愚弄?”,今天我们从技术的角度上尝试分析如何借助数学模型进行舆情反转的预测。
贝叶斯网络的结构
贝叶斯网络(Bayesian Network,BN)由节点和有向边组成的有向无环图(DAG),用于表示随机变量之间的条件依赖关系。
先举一个简单的例子:假设我们想分析一个学生的考试成绩(Grade),可以通过多个因素来预测成绩。这些因素包括:
智力水平:高(high)或低(low)
是否参加了补习班:是(yes)或否(no)
教师评价:好(good)或差(bad)
这些因素之间的关系可以用一个贝叶斯网络表示,如下所示:
在这个结构中:智力水平直接影响考试成绩。是否参加了补习班也直接影响考试成绩。考试成绩影响教师评价。
当我们我们要分析一个舆情反转事件,我们需要考虑以下因素【1】
平台控制性(S_C):平台对用户言论的控制程度。
信息准确性(I_A):信息的表达和解读准确性。
主体批判性(U_J):舆情主体的批判能力。
传播突变性(Mut):舆情传播的突变性。
政府回应速度(G_R):政府对事件的回应速度。
媒体报道力度(M_C):媒体对事件的报道力度。
这些因素共同影响舆情反转的态势(R_T),即舆情是否会发生反转。
我们可以将这些因素及其关系用一个贝叶斯网络表示出来,如下图所示:
在这个结构中:平台控制性影响信息准确性和政府回应速度。信息准确性影响主体批判性。主体批判性、传播突变性和媒体报道力度共同影响舆情反转态势。
联合概率分布
贝叶斯网络利用链式法则将联合概率分布分解为各个变量的条件概率分布的乘积。
设贝叶斯网络包含 个随机变量 ,每个变量 的父节点集合为 ,则联合概率分布表示为:
上述分解方式利用了变量之间的条件独立性,大大简化了联合概率的计算。
贝叶斯网络的诊断推理
贝叶斯网络不仅可以用来表示变量之间的条件依赖关系,还可以用来进行推理。推理分为两种:正向推理和逆向推理。
正向推理:已知原因,推导结果。例如,已知平台控制性低和信息准确性低,推导舆情反转的概率。
逆向推理:已知结果,推导原因。例如,已知與情发生了反转,推导可能的原因。
案例分析:舆情反转预测
假设我们有以下数据集,其中包含各种舆情事件以及对应因素的值:
样本 | S_C | I_A | U_J | Mut | G_R | M_C | R_T |
1 | low | low | low | high | slow | low | high |
2 | middle | high | middle | low | fast | high | low |
3 | high | middle | high | high | slow | high | middle |
4 | low | middle | low | low | slow | low | low |
5 | high | high | middle | high | fast | high | high |
6 | middle | low | high | low | fast | low | middle |
7 | low | low | middle | high | slow | high | high |
8 | middle | middle | low | low | fast | low | low |
9 | high | high | high | high | fast | high | middle |
10 | low | high | middle | low | slow | high | low |
import pandas as pd
from pgmpy.models import BayesianNetwork
from pgmpy.estimators import MaximumLikelihoodEstimator
from pgmpy.inference import VariableElimination
# 创建虚拟数据集
data = pd.DataFrame({
'S_C': ['low', 'middle', 'high', 'low', 'high', 'middle', 'low', 'middle', 'high', 'low'],
'I_A': ['low', 'high', 'middle', 'middle', 'high', 'low', 'low', 'middle', 'high', 'high'],
'U_J': ['low', 'middle', 'high', 'low', 'middle', 'high', 'middle', 'low', 'high', 'middle'],
'Mut': ['high', 'low', 'high', 'low', 'high', 'low', 'high', 'low', 'high', 'low'],
'G_R': ['slow', 'fast', 'slow', 'slow', 'fast', 'fast', 'slow', 'fast', 'fast', 'slow'],
'M_C': ['low', 'high', 'high', 'low', 'high', 'low', 'high', 'low', 'high', 'high'],
'R_T': ['high', 'low', 'middle', 'low', 'high', 'middle', 'high', 'low', 'middle', 'low']
})
# 定义贝叶斯网络结构
model = BayesianNetwork([
('S_C', 'I_A'),
('S_C', 'G_R'),
('I_A', 'U_J'),
('U_J', 'R_T'),
('Mut', 'R_T'),
('M_C', 'R_T')
])
# 使用最大似然估计进行参数学习
model.fit(data, estimator=MaximumLikelihoodEstimator)
# 创建推理对象
inference = VariableElimination(model)
# 进行预测
evidence = {'S_C': 'low', 'I_A': 'middle', 'U_J': 'low', 'Mut': 'high', 'G_R': 'slow', 'M_C': 'high'}
prediction = inference.map_query(variables=['R_T'], evidence=evidence)
print(f"Prediction: {prediction}")
# 进行原因诊断
result = inference.query(variables=['S_C', 'I_A', 'U_J', 'Mut', 'G_R', 'M_C'], evidence={'R_T': 'high'})
print(result)
这里用到了一个关键的python库pgmpy,它是用于概率图模型的实现库,能够方便地进行贝叶斯网络的构建、参数学习和推理。
通过上述代码,我们可以得到以下结果:
S_C | I_A | U_J | Mut | G_R | M_C | phi(S_C,I_A,U_J,Mut,G_R,M_C) |
S_C(high) | I_A(high) | U_J(high) | Mut(high) | G_R(fast) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(high) | Mut(high) | G_R(fast) | M_C(low) | 0.0065 |
S_C(high) | I_A(high) | U_J(high) | Mut(high) | G_R(slow) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(high) | Mut(high) | G_R(slow) | M_C(low) | 0.0032 |
S_C(high) | I_A(high) | U_J(high) | Mut(low) | G_R(fast) | M_C(high) | 0.0097 |
S_C(high) | I_A(high) | U_J(high) | Mut(low) | G_R(fast) | M_C(low) | 0.0000 |
S_C(high) | I_A(high) | U_J(high) | Mut(low) | G_R(slow) | M_C(high) | 0.0049 |
S_C(high) | I_A(high) | U_J(high) | Mut(low) | G_R(slow) | M_C(low) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(high) | G_R(fast) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(high) | G_R(fast) | M_C(low) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(high) | G_R(slow) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(high) | G_R(slow) | M_C(low) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(low) | G_R(fast) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(low) | G_R(fast) | M_C(low) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(low) | G_R(slow) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(low) | Mut(low) | G_R(slow) | M_C(low) | 0.0000 |
S_C(high) | I_A(high) | U_J(middle) | Mut(high) | G_R(fast) | M_C(high) | 0.0874 |
S_C(high) | I_A(high) | U_J(middle) | Mut(high) | G_R(fast) | M_C(low) | 0.0194 |
S_C(high) | I_A(high) | U_J(middle) | Mut(high) | G_R(slow) | M_C(high) | 0.0437 |
S_C(high) | I_A(high) | U_J(middle) | Mut(high) | G_R(slow) | M_C(low) | 0.0097 |
S_C(high) | I_A(high) | U_J(middle) | Mut(low) | G_R(fast) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(middle) | Mut(low) | G_R(fast) | M_C(low) | 0.0194 |
S_C(high) | I_A(high) | U_J(middle) | Mut(low) | G_R(slow) | M_C(high) | 0.0000 |
S_C(high) | I_A(high) | U_J(middle) | Mut(low) | G_R(slow) | M_C(low) | 0.0097 |
... |
通过贝叶斯网络模型,我们可以预测和分析舆情反转的态势。以上结果显示了在不同条件下舆情反转态势(R_T = high)的概率。例如:
当所有因素都为高,舆情反转的概率为 0.0000。
当所有因素都为高,但媒体报道力度为低时,舆情反转的概率增加到 0.0065。
当平台控制性、信息准确性、主体批判性和传播突变性都为高,但政府回应速度为慢,媒体报道力度为低时,舆情反转的概率为 0.0032。
影响因素分析
信息准确性高时,公众能够获取更真实的信息,从而减少误解和误导,降低舆情反转的可能性。
主体批判性高的情况下,公众更能辨别信息的真实性,不易被谣言和虚假信息所迷惑,舆情反转的概率较低。
媒体报道力度大时,事件受到更多关注,容易引起公众情绪波动,增加舆情反转的可能性。
贝叶斯网络模型为我们提供了一种有效的方法来分析和预测舆情反转,帮助我们更好地理解各因素之间的关系及其对舆情反转的影响,从而更有针对性地进行舆情管理。(作者:王海华)
参考资料:[1]田世海,孙美琪,张家毓.基于贝叶斯网络的自媒体舆情反转预测[J].情报理论与实践,2019,42(02):127-133.DOI:10.16353/j.cnki.1000-7490.2019.02.021.
编辑:王菁
关于我们
数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。
新浪微博:@数据派THU
微信视频号:数据派THU
今日头条:数据派THU