import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import datetime import warnings1.pandas→ 数据处理的 “Excel 神器”核心作用处理表格数据CSV、Excel 文件做数据清洗、筛选、统计、合并等是数据分析的 “主力”。可以把它理解成 Python 版的 Excel而且功能强 100 倍。常用场景读文件、看数据、筛选数据、处理缺失值、统计指标。# 1. 读入数据比如你的信用评分数据集 df pd.read_csv(credit_data.csv) # 读csv文件 df pd.read_excel(credit_data.xlsx) # 读excel文件 # 2. 看数据基本信息 print(df.head()) # 看前5行数据 print(df.info()) # 看列名、数据类型、缺失值 print(df.describe()) # 看数值列的统计均值、最大/最小等 # 3. 简单筛选和处理 print(df[df[age] 30]) # 筛选年龄大于30的用户 df.fillna(0, inplaceTrue) # 把缺失值用0填充2.numpy→ 数值计算的 “数学工具包”核心作用做高效的数值计算尤其是数组、矩阵运算很多其他库pandas、sklearn都依赖它。可以把它理解成 Python 里的 “计算器 数组工具”。常用场景生成数据、数学运算、数组操作、和 pandas 配合处理数据。import numpy as np # 1. 生成数组 arr np.array([1, 2, 3, 4, 5]) print(arr * 2) # 数组每个元素都乘2 → [2 4 6 8 10] # 2. 常用数学计算 print(np.mean(arr)) # 平均值 print(np.max(arr)) # 最大值 print(np.min(arr)) # 最小值 print(np.log(10)) # 自然对数评分卡公式里就用到了这个3.matplotlib.pyplot→ 画图的 “基础画笔”核心作用Python 最基础的画图库用来画各种图表折线图、柱状图、散点图、直方图等是所有可视化的 “地基”。你可以把它理解成 Python 里的 “画板和画笔”。常用场景画基础图表、设置图的标题 / 坐标轴、保存图片。import matplotlib.pyplot as plt # 画一个简单的柱状图 x [A, B, C, D] y [10, 20, 15, 25] plt.bar(x, y) # 画柱状图 plt.title(示例柱状图) # 设置标题 plt.xlabel(类别) # 设置x轴标签 plt.ylabel(数值) # 设置y轴标签 plt.show() # 显示图片4.seaborn→ 美化画图的 “高级画笔”核心作用基于 matplotlib 的高级可视化库画出来的图更美观、更专业而且画统计图表比如箱线图、热力图、分布直方图特别方便。可以把它理解成 matplotlib 的 “美颜滤镜 高级模板”。常用场景EDA 里画分布、相关性热力图、箱线图比 matplotlib 写起来更简单。import seaborn as sns # 画箱线图看数据分布和异常值风控里很常用 sns.boxplot(xtarget, yage, datadf) # target是好坏用户标签 plt.show() # 画相关性热力图看变量之间的相关性 corr df.corr() sns.heatmap(corr, cmapcoolwarm, annotTrue) plt.show()用pandas读入数据、清洗数据、处理缺失值用numpy做数值计算、统计指标用datetime处理数据里的时间字段用matplotlib和seaborn画各种图表做可视化分析什么是特征工程把手里的原始数据加工成模型喜欢的 “好特征”让模型更容易学、学得更好主要包括处理文本 / 类别数据比如 “性别男 / 女” 转成数字特征选择挑出对模型有用的特征去掉没用的特征缩放把数值缩到同一个范围缺失值处理、异常值处理等# 基础数据处理 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import datetime from tqdm import tqdm # 进度条让循环过程更直观 # 【核心特征工程相关】 from sklearn.preprocessing import LabelEncoder from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 from sklearn.preprocessing import MinMaxScaler # 模型后面建模用和特征工程暂时无关 import xgboost as xgb import lightgbm as lgb from catboost import CatBoostRegressor # 模型评估与交叉验证 from sklearn.model_selection import StratifiedKFold, KFold from sklearn.metrics import accuracy_score, f1_score, roc_auc_score, log_lossMinMaxScaler把数值缩到 0~1 之间很多数值特征的范围不一样比如年龄18~60收入3000~50000模型训练时数值大的特征会 “抢权重”比如收入的数值大模型就会更关注收入忽略年龄。MinMaxScaler会把所有特征缩到0~1之间消除数值范围的影响让模型公平对待每个特征。公式X_scaled (X - X.min()) / (X.max() - X.min())from sklearn.preprocessing import MinMaxScaler import pandas as pd data pd.DataFrame({ age: [20, 30, 40, 50], income: [3000, 8000, 15000, 30000] }) scaler MinMaxScaler() data_scaled scaler.fit_transform(data) print(data_scaled) # 输出结果 # [[0. 0. ] # [0.33333333 0.17241379] # [0.66666667 0.4137931 ] # [1. 1. ]]3.SelectKBestchi2帮你挑出 “最有用” 的特征有很多特征比如几十上百个里面有些特征对模型没什么用甚至会干扰模型。SelectKBest会根据指定的评分方法帮你选出对目标变量比如 “是否违约”最有用的前 K 个特征。chi2是它的一种评分方法卡方检验专门用来衡量类别特征和类别目标变量之间的相关性相关性越高特征越有用。from sklearn.feature_selection import SelectKBest, chi2 import pandas as pd # 示例数据特征 目标变量0不违约1违约 X pd.DataFrame({ gender: [0,1,0,1,0,1], age: [20,30,40,50,25,35], useless_feature: [1,1,1,1,1,1] # 完全没用的特征 }) y [0,0,1,1,0,1] # 选前2个最好的特征 selector SelectKBest(score_funcchi2, k2) X_new selector.fit_transform(X, y) # 查看哪些特征被选中了 print(selector.get_support()) # 输出[ True True False ] print(X.columns[selector.get_support()]) # 输出Index([gender, age], dtypeobject)模型评估方法假设有一份1000 条用户数据其中好用户 800 条坏用户 200 条比例 4:1要训练一个信用评分模型需要划分训练集和测试集。① 留出法Holdout核心思想一刀切开一分为二训练集用来教模型测试集用来检验模型效果举个例子我们按8:2划分训练集800 条其中好用户 640 条坏用户 160 条保持 4:1 的比例这就是分层采样测试集200 条其中好用户 160 条坏用户 40 条步骤拆解按好 / 坏用户的比例分层抽样保证训练集和测试集的分布和原数据一致用训练集训练模型用测试集看模型效果比如准确率、AUC优缺点✅ 优点简单粗暴一次划分就能搞定速度快❌ 缺点只分一次结果受划分影响大比如刚好测试集里坏用户特别少结果就不准② 交叉验证法K 折交叉验证核心思想反复切分取平均把数据分成 K 份轮流拿其中 1 份当测试集剩下的当训练集重复 K 次最后取平均结果。最常用的是10 折交叉验证。举个例子10 折交叉验证还是那 1000 条数据按好 / 坏用户分层分成 10 份每份 100 条其中好用户 80 条坏用户 20 条第 1 次用第 1 份当测试集剩下 9 份训练 → 得到第 1 个结果第 2 次用第 2 份当测试集剩下 9 份训练 → 得到第 2 个结果...第 10 次用第 10 份当测试集剩下 9 份训练 → 得到第 10 个结果最终把 10 次的结果取平均值就是模型的最终效果留一法K1 的特殊情况如果数据特别少比如只有 10 条数据每次拿 1 条当测试集剩下 9 条训练重复 10 次特点划分最公平但数据量大的时候速度极慢几乎不用优缺点✅ 优点结果稳定不容易被一次划分带偏能更客观地评估模型❌ 缺点要训练 K 次速度比留出法慢很多③ 自助法Bootstrap核心思想有放回抽样数据少的时候用从数据里有放回地抽样本组成训练集没被抽到的当测试集。还是 1000 条数据有放回地抽 1000 次每次抽 1 条组成一个新的训练集因为是有放回有的样本会被抽中多次有的一次都没被抽到理论上大约有 36.8% 的样本没被抽到这就是测试集用抽到的样本训练模型用没被抽到的样本测试模型优缺点✅ 优点数据量特别少的时候也能用不用硬切分❌ 缺点训练集里有重复样本会引入偏差数据量充足时不推荐用场景推荐方法数据量很大比如上万条留出法8:2/7:3速度快数据量中等想结果更稳定K 折交叉验证常用 10 折数据量特别少比如几百条自助法 或 留一法