共计 2296 个字符,预计需要花费 6 分钟才能阅读完成。
数据集背景与结构分析
2023 年泰迪杯数据挖掘挑战赛 B 题数据集是一个典型的工业场景数据集,主要包含设备传感器采集的时间序列数据。从初步分析来看,数据集具有以下特点:

- 多维度特征:包含温度、压力、振动等 20+ 传感器指标
- 时间连续性:数据按设备 ID 和时间戳排序,存在明显的时间依赖性
- 类别不平衡:故障样本占比约 5%,需要特殊处理
- 数据质量问题:部分传感器存在缺失值和异常波动
import pandas as pd
# 查看数据概览
data = pd.read_csv('teddy2023b.csv')
print(f"数据集形状: {data.shape}")
print("\n 前 5 行数据:")
display(data.head())
print("\n 数据统计描述:")
display(data.describe())
数据预处理实战
缺失值处理
- 识别缺失情况:
# 计算每列缺失率
missing_ratio = data.isnull().mean() * 100
missing_ratio[missing_ratio > 0].sort_values(ascending=False)
-
处理策略:
-
连续特征:使用同设备前后时间点的均值填充
- 分类特征:用众数填充
# 按设备分组填充
for col in ['temp1', 'pressure2']:
data[col] = data.groupby('device_id')[col].transform(lambda x: x.fillna(x.mean()))
异常值检测
使用 IQR 方法识别异常:
from scipy import stats
def detect_outliers(df, column):
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
return df[(df[column] < (Q1 - 1.5*IQR)) | (df[column] > (Q3 + 1.5*IQR))]
outliers = detect_outliers(data, 'vibration3')
print(f"发现 {len(outliers)} 个异常值")
特征工程技巧
时间特征提取
# 从时间戳提取特征
data['timestamp'] = pd.to_datetime(data['timestamp'])
data['hour'] = data['timestamp'].dt.hour
data['day_of_week'] = data['timestamp'].dt.dayofweek
滑动窗口统计
# 计算 3 小时滑动均值
data['temp1_rolling'] = data.groupby('device_id')['temp1'].transform(lambda x: x.rolling(window=3, min_periods=1).mean())
基础建模方案
随机森林实现
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 准备数据
X = data.drop(['fault_label', 'timestamp'], axis=1)
y = data['fault_label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y)
# 训练模型
rf = RandomForestClassifier(n_estimators=100, class_weight='balanced', random_state=42)
rf.fit(X_train, y_train)
# 评估
from sklearn.metrics import classification_report
print(classification_report(y_test, rf.predict(X_test)))
新手避坑指南
- 时间序列处理不当:
- 错误做法:直接随机拆分训练 / 测试集
-
正确做法:按时间顺序划分,确保测试集时间晚于训练集
-
类别不平衡忽略:
- 错误做法:直接使用准确率评估模型
-
正确做法:采用 F1-score 或 AUC-ROC 指标,使用 class_weight 参数
-
特征缩放遗漏:
- 错误做法:不同量纲特征直接输入模型
- 正确做法:对连续特征进行标准化 / 归一化
性能优化建议
- 内存优化:
-
将分类特征转换为 category 类型
data['device_id'] = data['device_id'].astype('category') -
并行计算:
- 使用 joblib 加速特征工程
from joblib import Parallel, delayed def process_feature(col): return data[col].apply(complex_transform) results = Parallel(n_jobs=4)(delayed(process_feature)(col) for col in feature_cols)
延伸学习建议
- 进阶资源:
- 《Python 金融大数据分析》时间序列处理章节
-
Kaggle 上的 TalkingData AdTracking Fraud 案例
-
实践建议:
- 尝试不同的窗口大小计算滑动统计量
- 用 TSNE 可视化高维特征
- 在阿里云 PAI 平台体验分布式训练
通过系统性地完成数据探索、清洗、特征工程和建模全流程,新手可以快速掌握工业场景数据挖掘的核心方法。建议先从简单模型入手,逐步迭代优化,避免一开始就陷入复杂模型的调参陷阱。
正文完
发表至: 未分类
近两天内
