Skip to content

理解序列的复杂度(一):波动

· 8 min

什么是波动度(Turbulence),它如何衡量状态的波动性与不规则性?Turbulence 的中文是气体或者液体的湍流,根据维基百科:

湍流,在流体动力学中,是一种流体运动,其特征是压力和流速的无序变化。它与层流相对。 湍流十分常见,例如海浪、湍急的河流、滚滚的暴风云或烟囱冒出的烟雾,自然界中发生或工程应用中产生的大多数流体流动都是湍流。

在社会序列分析中,因为还没有一个统一的翻译方式,我们姑且将其翻译为波动指数

熵衡量的是“你都用了哪些状态、各自多少次”,但波动指数则是更进一步,因为它还考虑了状态的顺序切换频率稀有程度

你可以把它理解为:“这个人的生活状态变来变去,波动大不大?”


Turbulence 考虑的因素包括:#

  1. 状态种类是否多(越多越复杂)
  2. 状态变化是否频繁(越频繁越不稳定)
  3. 顺序结构是否有规律(越乱越复杂)
  4. 是否包含罕见状态(越罕见越增加波动度)

Turbulence 是如何一步步计算出来的?#

Turbulence 的完整算法比信息熵要复杂,这个概念的原始定义来自 Gabadinho et al. (2010),TraMineR 的作者们:

Gabadinho, A., Ritschard, G., Müller, N. S., & Studer, M. (2010).
Mining sequence data in R with the TraMineR package: A user’s guide.

在该文中,第 46 页明确解释:

The turbulence of a sequence is defined as:
Turb(s) = D(s) × T(s)

其中:

虽然 TraMineR 的完整实现依赖状态间的距离矩阵,我们可以从简化角度理解 Turbulence 是怎么逐步构造的:

步骤 1:计算 Diversity(多样性)#

类似 Entropy,但更加重视“用了多少种状态”:

diversity = (number_of_distinct_states)^2 / sequence_length

示例:

[Work, Work, Work, Retired, Retired]
2 种状态,长度 5
diversity = (2^2) / 5 = 0.8

步骤 2:计算 Transition Weight(结构复杂度)#

这里就涉及“状态切换是否频繁”、“顺序是否稀有”:

[Work → Work → Work → Retired → Retired][Work, Retired]

也就是说:稀有路径更“复杂”,从而导致 Turbulence 提高。

在 TraMineR 中,transition weight 是通过比较这个序列在全体中的“频率”来估计的。


步骤 3:Turbulence = Diversity × Weight#

turbulence = diversity × 1 / freq_rank

这就引入了“群体罕见性”这个因素。

整体来说,我们来举一个直观的对比例子:

序列 ATurbulence
[Work, Work, Work, Work]很低
[Work, Retired, Work, Retired]中等
[Unemployed, Military, Abroad, Student]很高(因为状态稀有+频繁切换)

总结一句话:

Turbulence 是 Entropy 的“进阶版本”:
它不只看状态用了几种、是否平均,还看你状态变得快不快、罕不罕见、顺序混不混乱。越复杂、越稀有、越跳动的序列 → Turbulence 越高。

Turbulence 的实际 R 实现#

seqST()TraMineR 包里的一个专门函数,其内部实现考虑了下面的这些信息:


举个对比例子:#

假设你有两条序列:

序列 A(低波动):#

[Work, Work, Work, Work, Work, Work]

序列 B(中波动):#

[Student, Work, Work, Retired, Retired, Retired]

序列 C(高波动):#

[Student, Retired, Student, Work, Retired, Work]

熵 vs. Turbulence:对比总结#

特性EntropyTurbulence
看状态种类
看比例是否平均
看状态顺序✅(考虑切换位置)
看切换频率✅ (变得越频繁越复杂)
看稀有状态✅ (稀有状态出现越多越高)
代表的复杂度类型“静态的状态多样性”“动态的状态波动和波动”

小结:什么时候该用 Entropy vs. Turbulence?

如果你是社会科学研究者,或者在建模用户行为序列、职业路径、疾病演化等问题时,这两个指标都非常有参考价值。这也是为什么,我们会有下面这样一个函数,来帮助我们计算一个涵盖了信息熵和波动指数的综合指标。


学习加餐:为什么 AI 领域,关心 Entropy,但对 Turbulence 的应用很少?#

Turbulence(波动度)不如熵的应用广泛,但在处理具有行为序列、时间序列或路径轨迹的数据时,会比较有用。一些可能的应用场景包括: