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

关于series_outlier方法中异常值分数计算及Python实现的技术问询

关于series_outlier方法中异常值分数计算及Python实现的技术问询

看起来你正在尝试实现一个基于自定义分位数的异常值分数计算方法,我注意到你提供的代码存在一些小问题(比如缩进不规范、lambda表达式未闭合),先给你修正后的完整可运行版本,再逐个拆解关键逻辑:

import pandas as pd
import numpy as np
from scipy.stats import norm

# Load the data into a DataFrame
data = {
    'series': [67.95675, 58.63898, 33.59188, 4906.018, 5.372538, 702.1194, 0.037261, 11161.05, 1.403496, 100.116]
}
df = pd.DataFrame(data)

# Function to calculate the outlier score based on custom percentiles
def custom_percentile_outliers(series, p_low=10, p_high=90):
    # Calculate custom percentiles
    percentile_low = np.percentile(series, p_low)
    percentile_high = np.percentile(series, p_high)

    # Calculate Z-scores for the percentiles assuming normal distribution
    z_low = norm.ppf(p_low / 100)
    z_high = norm.ppf(p_high / 100)

    # Calculate normalization factor
    normalization_factor = (2 * z_high - z_low) / (2 * z_high - 2.704)

    # Calculate outliers score
    return series.apply(lambda x: (x - percentile_high) / (percentile_high - percentile_low) * normalization_factor)

# 测试函数并查看结果
df['outlier_score'] = custom_percentile_outliers(df['series'])
print(df)

接下来拆解这个方法的核心逻辑:

  • 数据准备:用字典构造包含目标序列的DataFrame,这是处理结构化数据的常规操作
  • 自定义分位数计算:通过np.percentile获取序列的低分位数(p_low)和高分位数(p_high),这一步是划定“正常数值范围”的边界
  • Z分数转换:利用norm.ppf(正态分布的分位数函数)将分位数百分比转换为对应的Z值,这是在假设数据近似正态分布的前提下,把分位数映射到标准正态分布的刻度
  • 归一化因子计算:这个自定义公式是为了将异常值的偏离程度映射到特定区间,调整分数的缩放比例,让不同分位数设置下的异常值分数更具可比性
  • 异常值分数计算:对每个元素,计算其超出高分位数的相对偏离程度,再乘以归一化因子得到最终分数——分数越高,说明该值越偏离正常范围的上限

备注:内容来源于stack exchange,提问作者New2015

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:04:31