HBOS-直方图异常分数
HBOS-直方图异常分数 的真实核心主要位于:
HBOS-直方图异常分数
1. 方法概述
HBOS-直方图异常分数 的真实核心主要位于:
core/hbos_calculator.py
从当前源码看,这个模块实现的是一个比较完整的 Histogram-based Outlier Score 流程:
- 选择特征列、标签列与 ID 列;
- 可选 One-Hot、缺失值处理与缩放;
- 对每个特征独立构建直方图;
- 用样本所在 bin 的归一化柱高计算局部分数;
- 对所有特征分数求和得到总异常分数;
- 按
contamination分位数给出异常阈值; - 导出 Top 异常样本、每特征贡献值、ROC/PR/PCA 图等。
HBOS 的核心假设是:特征之间近似独立,异常点会落在多个特征的低密度区间。
2. 数据预处理
2.1 特征选择与 One-Hot
若 one_hot=True,代码会对非数值列执行 One-Hot 编码:
$$ x_{ij}^{(k)}= \begin{cases} 1,& x_{ij}=\text{cat}_k\\ 0,& \text{otherwise} \end{cases} \tag{1} $$
若不开启 One-Hot,非数值列会被尽量转数值,彻底不可转的列最终会被丢弃。
2.2 缺失值处理
项目支持:
drop_rowsdrop_colsmeanmedianzero
2.3 缩放
代码支持:
nonestandardminmax
标准化形式可写为
$$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$
3. HBOS 主计算
3.1 直方图密度
对第 \(j\) 个特征,代码先把该列划分为若干 bin,并得到每个 bin 的原始计数 \(c_{bj}\)。随后做平滑:
$$ c_{bj}^{(\text{s})}=c_{bj}+\alpha \tag{3} $$
其中 \(\alpha\) 对应参数 hist_smoothing。
若第 \(b\) 个 bin 的宽度为 \(\Delta_{bj}\),则其密度为
$$ p_{bj}=\frac{c_{bj}^{(\text{s})}}{\sum_r c_{rj}^{(\text{s})}} \tag{4} $$
$$ \mathrm{density}_{bj}=\frac{p_{bj}}{\Delta_{bj}} \tag{5} $$
3.2 归一化柱高
代码进一步将每列密度除以该列最大密度:
$$ h_{bj}=\frac{\mathrm{density}_{bj}}{\max_r \mathrm{density}_{rj}} \tag{6} $$
并裁剪到 \([\varepsilon,+\infty)\),避免后续对数出错。
3.3 单特征异常分量
若样本 \(i\) 在第 \(j\) 个特征上落入第 \(b(i,j)\) 个 bin,则该列分数分量为
$$ s_{ij}=-\log h_{b(i,j),j} \tag{7} $$
柱高越低,\(s_{ij}\) 越大,表示该特征上越“稀有”。
3.4 总异常分数
最终总分按特征求和:
$$ S_i=\sum_{j=1}^{d}s_{ij} \tag{8} $$
这就是结果表中的 score。
4. 阈值、标签与评估
4.1 阈值
若污染率为 contamination,代码用分位数阈值:
$$ \tau=Q_{1-\text{contamination}}(S) \tag{9} $$
然后判定
$$ \hat y_i= \begin{cases} 1,& S_i\ge \tau\\ 0,& \text{otherwise} \end{cases} \tag{10} $$
同时另存成异常检测常见的:
pred_label = -1表示异常pred_label = 1表示正常
4.2 有标签时的二值映射
标签列会按“非 0 即异常”的规则映射到 \(\{0,1\}\),即
$$ y_i= \begin{cases} 0,& \text{原值}=0\\ 1,& \text{原值}\neq 0 \end{cases} \tag{11} $$
因此它兼容 0/1 与 -1/1 两类标签。
4.3 评估指标
代码在有标签时会计算:
$$ \mathrm{Precision}=\frac{TP}{TP+FP},\quad \mathrm{Recall}=\frac{TP}{TP+FN},\quad \mathrm{F1}=\frac{2PR}{P+R} \tag{12} $$
并尝试追加:
roc_aucaverage_precision
5. 输出结果与论文应用
5.1 Excel 工作表
当前项目导出:
ParametersRawDataProcessedFeaturesScoresTopAnomaliesThresholdMetricsHistBinsHistSummaryTopContribEmbedding_2DCharts
其中 TopContrib 很重要,因为它会直接给出 Top 异常样本在每个特征上的 \(s_{ij}\) 分量。
5.2 论文写作表述建议
可以写成:
- 基于各特征独立直方图密度构造异常分数;
- 将样本在各特征上的低密度程度取负对数后累加,形成总异常分数;
- 通过污染率分位数阈值筛选异常样本,并用 ROC-AUC / AP 等指标评价检测效果。
6. 实现说明与注意事项
6.1 这里的 HBOS 做了平滑和归一化
因此它不是最朴素的“直接拿 bin 频率做分数”,而是:
- 先做 Laplace 平滑;
- 再除以 bin 宽得到密度;
- 再按列最大密度归一化;
- 最后取负对数。
6.2 常数列会自动走兜底逻辑
若某列没有波动,代码会人为构造单个 bin,并使该列分数贡献接近 0,避免无意义地放大异常分数。
6.3 top_n 只影响展示
top_n 决定 TopAnomalies / TopContrib 输出多少条记录,不改变阈值与异常标签的实际生成规则。
7. 论文写作模板
7.1 方法描述模板
“本文采用基于特征独立直方图密度估计的异常检测方法,对每个特征分别构建区间直方图,并利用样本落入区间的低密度程度计算单维异常分量,最终将各维分量累加得到总异常分数。依据项目当前实现,直方图密度在计算前加入了平滑项,并进一步除以 bin 宽度与列内最大密度进行归一化,因此本文所用 HBOS 分数属于带平滑与归一化的工程实现版本,而非最朴素的原始频数口径。”
7.2 结果解释模板
结果部分可写为:总异常分数越大,说明样本在多个特征维度上越倾向于落入低频区间。TopContrib 表进一步揭示了推动异常分数升高的主要特征来源,因此论文可从“异常程度”与“异常来源”两个层面组织结果讨论。若得分分布图中阈值线右侧仅集中少量样本,则说明阈值具有较强筛选作用;若带标签结果同时具有较高 ROC-AUC 与 AP,则说明 HBOS 在排序识别与阈值判别两方面均具有较好表现。
7.3 表格标题模板
- 表 1 HBOS 参数设置与直方图构造规则表
- 表 2 样本异常分数与排序结果表
- 表 3 Top 异常样本特征贡献结果表
- 表 4 带标签场景下 HBOS 检测性能指标表
7.4 图表题注模板
- 图 1 HBOS 异常分数分布图及阈值位置示意图。
- 图 2 HBOS Top 异常样本特征贡献对比图。
- 图 3 HBOS 异常样本 PCA 二维嵌入散点图。
7.5 表格示例
表 1 HBOS Top 异常样本及特征贡献示例
| 样本编号 | 总异常分数 | 主要贡献特征 | 贡献值 | 排名 |
|---|---|---|---|---|
| \(i_1\) | ||||
| \(i_2\) |
表注:总异常分数由各特征单维负对数密度分量累加得到;主要贡献特征来自 TopContrib 工作表。
8. 单篇终审补充
8.1 图题与表题对齐建议
Parameters表可写为:表X HBOS 参数设置与阈值规则表。RawData表可写为:表X HBOS 原始数据表。ProcessedFeatures表可写为:表X HBOS 处理后特征表。Scores表可写为:表X HBOS 样本异常分数结果表。TopAnomalies表可写为:表X HBOS Top 异常样本排序表。Threshold表可写为:表X HBOS 异常阈值信息表。Metrics表可写为:表X HBOS 检测性能指标汇总表。HistBins表可写为:表X HBOS 各特征直方图区间表。HistSummary表可写为:表X HBOS 直方图统计摘要表。TopContrib表可写为:表X HBOS Top 异常样本特征贡献表。Embedding_2D表可写为:表X HBOS 二维嵌入结果表。Charts表可写为:表X HBOS 图表索引与路径清单。scores_hist.png建议写为:图X HBOS 异常分数分布图。threshold_recall.png建议写为:图X HBOS 阈值与召回率关系图。roc.png建议写为:图X HBOS ROC 曲线图。pr.png建议写为:图X HBOS PR 曲线图。embedding_pca.png建议写为:图X HBOS PCA 二维嵌入图。
8.2 终审说明
- 当前代表性结果目录中的真实主工作簿为
HBOS-直方图异常分数_results_20260322_144010.xlsx,复现输出为hbos_repro.xlsx。论文附录中若列文件名,应明确区分主运行结果与 repro 结果。 - 当前真实工作表体系比一般异常检测算法更细,除了
Scores/TopAnomalies/Threshold/Metrics外,还包括HistBins、HistSummary和TopContrib。正文若讨论异常来源,应优先引用TopContrib,不要只用总分排序替代。 - 当前实体图文件位于
*_charts/目录下,真实图名包括scores_hist.png、threshold_recall.png、roc.png、pr.png、embedding_pca.png。终稿图题应按这组真实文件名对齐,而不是泛写成“异常检测结果图”。 - 真实 repro 脚本为
repro_hbos.py,并通过INPUT_FILE = 'repro_inputs/hbos_repro_data.csv'读取输入副本。附录中的复现实验说明应保留这一统一转写后的 CSV 路径口径。 - 当前实现会把原始输入或内存数据统一落为
hbos_repro_data.csv,因此论文若对“原始上传文件格式”有要求,应另在实验设置中补充说明,而不能默认 repro 仍直接读取最初的 Excel 文件。
8.3 全量强化补充
- 本轮按真实磁盘再次核对,算法目录为
具体的算法3/异常检测/HBOS-直方图异常分数,代表性结果目录更新为具体的算法3/异常检测/HBOS-直方图异常分数/results/HBOS_20260329_170106。 - 该目录实际包含两份工作簿:主运行结果
HBOS-直方图异常分数_results_20260329_170106.xlsx与复现输出hbos_repro.xlsx。两份工作簿的真实工作表一致,均为Parameters、RawData、ProcessedFeatures、Scores、TopAnomalies、Threshold、Metrics、HistBins、HistSummary、TopContrib、Embedding_2D、Charts。 - 主运行图目录为
HBOS-直方图异常分数_results_20260329_170106_charts/,复现图目录为hbos_repro_charts/。两套目录中均可见embedding_pca.png、pr.png、roc.png、scores_hist.png、threshold_recall.png。 - 当前输入副本位于
repro_inputs/hbos_repro_data.csv,repro_hbos.py中明确写有INPUT_FILE = 'repro_inputs/hbos_repro_data.csv'。这属于标准repro_inputs/...结构。 - 文档中若讨论阈值,应引用真实存在的
Threshold工作表;若讨论异常来源,应引用TopContrib,而不是仅用Scores的总异常分数排序替代。 - 需要避免把
__pycache__或历史测试目录写入论文证据。当前代表性目录的有效证据是主 xlsx、repro xlsx、两套图目录、repro_hbos.py和repro_inputs/hbos_repro_data.csv。
9. 软件实现核查补充(2026-07)
- 当前主结果目录应写作
具体的算法3/异常检测/HBOS-直方图异常分数/results/HBOS_20260329_170106。 - 正文应围绕
Parameters、RawData、ProcessedFeatures、Scores、TopAnomalies、Threshold、Metrics、HistBins、HistSummary、TopContrib、Embedding_2D、Charts来写。 - 图证应对应
scores_hist.png、threshold_recall.png、roc.png、pr.png、embedding_pca.png,并把主运行图和hbos_repro_charts/分开说明。 - 复现脚本应按
repro_hbos.py + repro_inputs/hbos_repro_data.csv的口径说明。