时间序列数据的异常值检测,用 Ruby 也能玩得挺溜的。Time-Series-Anomaly-Detection项目就是个不错的示范,用了Z-score和IQR两种统计方法,不复杂,还挺实用。你要是平时用 Ruby 点股票走势、传感器读数啥的,这项目能帮你快速把异常值揪出来。
Z-score的思路简单粗暴:判断数据点离均值有多远。用个公式(X - μ) / σ
,超过 3 就当可疑值,适合那种数据比较规整、接近正态分布的情况。
如果数据波动比较大、不服从正态分布?那就用IQR:低于Q1 - 1.5 * IQR
或高于Q3 + 1.5 * IQR
的点,统统算异常。这种方法对极端值更敏感,容错性也更强。
代码部分也挺清爽,基本就几个函数搞定:计算平均值、标准差,循环跑数据。Ruby 里用statsample
库比较顺手,也可以用mathn
自己算。响应快,逻辑也清晰,新手也能轻松上手。
对了,跑模型前别忘了做数据预,啥缺失值、间断数据都得先搞干净。遇上非线性趋势的时间序列,也可以考虑加点模型,比如LOF或者机器学习那一套,别太死磕统计法。
如果你平时做系统监控、金融数据,或者风控模型开发,这套代码能省你不少事。嗯,有时候越工具,越好用。