You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

环形数据(0~360°角度类)的异常值识别与剔除方法咨询

环形角度数据异常值识别方法

核心逻辑是使用**方向统计(圆形统计)**的规则替代普通算术统计,避开0°和360°的环形衔接问题,具体实现步骤如下:

1. 角度转单位向量

把每个角度先转换为弧度,再映射为二维平面上的单位向量,消除环形边界的影响:

  • 对角度$\theta$(单位:°),转弧度:$rad = \theta \times \pi / 180$
  • 计算向量分量:$x = cos(rad)$,$y = sin(rad)$

以示例数据[350, 0, 10]为例,转换后的x值分别约为0.9848、1、0.9848,y值分别约为-0.1736、0、0.1736。

2. 计算圆形均值

对所有向量的x、y分量分别取算术平均,再反推得到真实的环形均值:

  • 平均分量:$\bar{x} = mean(x)$,$\bar{y} = mean(y)$
  • 圆形均值(转角度后取0~360模):$\bar{\theta} = arctan2(\bar{y}, \bar{x}) \times 180 / \pi % 360$

刚才的示例中$\bar{x}≈0.9899$,$\bar{y}=0$,计算得到的均值就是0°,符合预期。

3. 计算圆形标准差

先计算所有向量的平均合向量长度$R$,再推导离散度:

  • 合向量长度:$R = \sqrt{\bar{x}^2 + \bar{y}^2}$,取值范围0~1,值越大说明数据越集中
  • 圆形标准差(转角度单位):$\sigma = \sqrt{-2 \times ln(R)} \times 180 / \pi$

4. 异常值判定

对每个角度计算它和圆形均值的最小环形差,结合类似3σ的规则判定异常:

  • 最小环形差公式:$\Delta = min(|\theta - \bar{\theta}|, 360 - |\theta - \bar{\theta}|)$
  • 判定规则:如果$\Delta > k \times \sigma$则判定为异常值,$k$一般取2或3,对应95%/99.7%的置信区间,可根据业务容忍度调整

Python实现示例

import numpy as np

def clean_circular_data(angles, k=2):
    # angles为0~360范围内的角度数组
    radians = np.deg2rad(angles)
    x, y = np.cos(radians), np.sin(radians)
    x_mean, y_mean = np.mean(x), np.mean(y)
    
    # 计算圆形均值
    mean_rad = np.arctan2(y_mean, x_mean)
    mean_deg = np.rad2deg(mean_rad) % 360
    
    # 计算圆形标准差
    R = np.sqrt(x_mean**2 + y_mean**2)
    std_rad = np.sqrt(-2 * np.log(R)) if R > 1e-6 else np.inf
    std_deg = np.rad2deg(std_rad)
    
    # 筛选非异常值
    diff = np.abs(angles - mean_deg)
    circ_diff = np.minimum(diff, 360 - diff)
    return angles[circ_diff <= k * std_deg]

# 测试
data = np.array([350, 0, 10, 90, 180, 270])
print(clean_circular_data(data, k=2))
# 输出:[350  0  10]

适用前提

该方法仅适合你提到的「大部分取值相近」的单峰分布场景,如果数据分布均匀(R<0.1)或者存在多个明显的聚类,需要先做聚类再按组处理。

内容的提问来源于stack exchange,提问作者jeandemeusy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:45:02