Pandas异常值检测得到负下限,求助问题原因
IQR异常值检测下限为负的原因及处理
你的操作没有出错,出现负的下限是IQR方法针对当前房价数据分布的正常结果,原因和处理方式如下:
- IQR的下限计算公式为
Q1 - 1.5*IQR,当数据的下四分位数(Q1)本身较小,同时四分位距(IQR)较大时,就会得到负数结果。结合你给出的房价数据最小值2500来看,实际数据中没有低于这个负下限的数值,说明只有高于上限649000的房价(比如最大值950000)属于潜在异常值。 - IQR是纯统计计算方法,不会考虑数据的实际业务逻辑(比如房价不可能为负)。如果要贴合业务场景,你可以手动将下限调整为数据的实际最小值,避免出现不合理的负数值范围。
调整后的参考代码:
def outliers(df, feature): Q1= df[feature].quantile(0.25) Q3 = df[feature].quantile(0.75) IQR = Q3 - Q1 upper_limit = Q3 + 1.5 * IQR # 手动修正下限为数据最小值,避免负数 lower_limit = max(Q1 - 1.5 * IQR, df[feature].min()) return upper_limit, lower_limit upper, lower = outliers(data, "price") print("Upper whisker: ", upper) print("Lower Whisker: ", lower)
内容的提问来源于stack exchange,提问作者Luis Valencia
相关产品推荐
相关产品推荐

