虚假数据注入攻击检测模型(FDIA) 采用机器学习和神经网络方法;或者基于模型、数据驱动的检测方法 异常检测模型

电网里混进假数据这事儿,比想象中危险多了。黑客随便改几个传感器的数值,整个电力系统就可能误判状态。去年MIT团队用树莓派就成功模拟了变电站数据注入,看得人后背发凉。今天咱们聊聊怎么用算法揪出这些狡猾的假数据。

先上道开胃菜——随机森林抓异常。电力数据里那些电压相角、线路功率参数,天生适合玩特征组合。看这段实操代码:

from sklearn.ensemble import RandomForestClassifier

X_train, X_test = load_scada_data()  

# 关键在设置class_weight平衡正负样本
clf = RandomForestClassifier(n_estimators=300, 
                            class_weight={0:1, 1:10}, 
                            max_depth=5)
clf.fit(X_train, y_train)

# 输出特征重要性排行榜
feat_import = pd.Series(clf.feature_importances_, index=feature_names)
print(feat_import.sort_values(ascending=False).head(3))
# 相位差变化率 ▏ 0.47
# 节点功率残差   ▏ 0.32
# 线路损耗波动   ▏ 0.19

注意class_weight参数,电力数据里攻击样本可能不到1%,不给少数类加权重模型直接摆烂。跑出来的特征重要性特别有意思,相位差这类动态参数比静态参数敏感十倍不止。

进阶玩法上LSTM自编码器。电力数据本质是时间序列,传统机器学习容易漏掉时序关联。搞个能记忆的神经网络更靠谱:

from keras.layers import LSTM, RepeatVector

# 输入是滑动窗口截取的时序片段
input_seq = Input(shape=(30, 5))  # 30分钟窗口,5个特征

# 编码器把序列压成潜在向量
encoder = LSTM(32, return_sequences=False)(input_seq)

# 解码器尝试重建输入
decoder = RepeatVector(30)(encoder)
decoder = LSTM(5, return_sequences=True)(decoder)

autoencoder = Model(input_seq, decoder)
autoencoder.compile(optimizer='adam', loss='mae')

# 训练时只用正常数据
history = autoencoder.fit(X_train_normal, X_train_normal, 
                         epochs=50, 
                         batch_size=128)

训练完用重构误差当异常分数。实测在IEEE 14节点系统上,当攻击导致线路功率超过阈值3%时,这个模型比传统阈值检测早0.8秒触发警报——别小看这不到一秒,足够保护设备免于连锁故障。

最后聊聊Isolation Forest这种非监督方法。有些电网老旧到连正常数据标签都没有,这时候得靠数据自己说话:

from sklearn.ensemble import IsolationForest

# 参数设置要激进些
clf = IsolationForest(n_estimators=200, 
                     max_samples=256, 
                     contamination=0.005,  # 假设攻击比例极低
                     behaviour='new')

clf.fit(X_unlabeled)
scores = clf.decision_function(X_test)

# 可视化异常区域
plt.scatter(X_pca[:,0], X_pca[:,1], c=scores, cmap='jet')
plt.colorbar()

这个热力图特别直观,正常数据点抱团取暖,攻击数据像火星子一样溅射在边缘。实际部署时记得做动态阈值,用滑动窗口计算最近24小时得分的3σ作为报警线。

这些模型现在都被集成到我们的开源工具包GridGuard里。不过说句实话,没有哪种方法能通吃所有场景。某省级电网去年同时部署了三种模型,结果随机森林在雷暴天气误报率飙升,LSTM在设备故障时反而更稳。玩数据安全的都知道,和黑客斗,本质是比谁更懂业务逻辑。

更多推荐