【指数编制系列二】数据标准化方法实战:从理论到Python实现
1. 为什么需要数据标准化做过数据分析的朋友应该都遇到过这样的问题当你试图把身高厘米和体重千克两个指标放在一起分析时会发现身高的数值普遍比体重大几十倍。这时候如果直接计算两者的相关性或者做聚类分析结果肯定会严重偏向数值更大的身高指标。这就是典型的量纲不一致问题。我在帮某电商平台做商品评价指数时就踩过这个坑。当时需要综合商品评分1-5分、销量0-10万件、价格10-10000元三个指标刚开始直接取平均值结果价格完全主导了指数走势。后来引入标准化处理才让三个指标真正实现了公平比较。数据标准化的本质是消除量纲影响让不同规格、不同单位的指标能够站在同一起跑线上。举个生活中的例子就像把美元、欧元、人民币都换算成购买力等价单位这样比较各国GDP才有意义。常见的标准化场景包括多指标综合评价如城市发展指数机器学习特征工程如KNN算法数据可视化对比如雷达图时间序列比较如股票收益率2. 最常用的两种标准化方法2.1 离差标准化Min-Max Scaling这是最直观的标准化方法原理是把数据线性压缩到[0,1]区间。公式很简单x (x - min) / (max - min)我去年做房价分析时就用过这个方法。某城市各区房价从2万到10万不等标准化后的值都在0-1之间最便宜的区 (2-2)/(10-2) 0最贵的区 (10-2)/(10-2) 1中间6万的区(6-2)/(10-2)0.5Python实现只要三行代码def min_max_scale(data): min_val min(data) max_val max(data) return [(x - min_val)/(max_val - min_val) for x in data]但要注意两个坑最大值最小值对异常值敏感比如某个区突然出现20万的豪宅新数据可能超出原范围来了个1.5万的房源2.2 Z-score标准化这个方法更适合数据分布比较均匀的情况公式是x (x - μ) / σ其中μ是均值σ是标准差。标准化后的数据均值为0标准差为1。我在用户行为分析中实测过某APP用户月活天数原始数据均值15天标准差5天。一个20天的用户标准化后就是(20-15)/51表示比平均水平高1个标准差。Python实现示例import numpy as np def z_score_scale(data): mean np.mean(data) std np.std(data) return [(x - mean)/std for x in data]Z-score的优点是可以处理负数在深度学习中使用较多。但要注意要求数据近似正态分布对异常值仍然敏感结果范围不固定可能超出[-3,3]3. 高级标准化技巧3.1 处理偏态分布对数变换当数据呈现右偏分布比如收入数据可以先做对数变换def log_scale(data): return [np.log10(x) for x in data]记得处理0值问题可以加个微小常数[x if x0 else 1e-5 for x in data]3.2 分类数据编码对于性别、颜色等分类数据常用one-hot编码from sklearn.preprocessing import OneHotEncoder encoder OneHotEncoder() encoded encoder.fit_transform([[男],[女],[男]])3.3 分位数标准化更鲁棒的方法是用分位数代替极值from sklearn.preprocessing import QuantileTransformer qt QuantileTransformer() data_trans qt.fit_transform(data)4. 实战电商商品评分标准化假设我们有如下商品数据商品ID价格销量评分A00129915004.5A0028992004.8A0035998003.9完整处理流程import pandas as pd from sklearn.preprocessing import MinMaxScaler # 读取数据 df pd.read_csv(products.csv) # 初始化scaler scaler MinMaxScaler() # 选择需要标准化的列 scale_cols [价格,销量,评分] # 拟合并转换 df[scale_cols] scaler.fit_transform(df[scale_cols]) # 查看结果 print(df.head())处理后的数据商品ID价格销量评分A0010.16671.00000.6667A0021.00000.00001.0000A0030.50000.46150.0000现在可以公平地计算综合得分了df[综合分] df[价格]*0.3 df[销量]*0.4 df[评分]*0.3标准化不是银弹我在金融风控项目中就遇到过标准化反而降低模型效果的情况。关键是要理解数据分布和业务场景多做AB测试验证效果。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2510898.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!