机器学习中的威布尔风险图 (Weibull Hazard Plot) 是什么?
机器学习中的威布尔风险图 (Weibull Hazard Plot) 是什么?
威布尔风险图 (Weibull Hazard Plot) 是一种基于统计学的工具,用于分析生存数据或可靠性数据。它主要用于描述系统或个体在不同时间点的失效风险,广泛应用于可靠性工程、风险评估和医学生存分析等领域。
在机器学习中,威布尔风险图可以帮助我们更好地理解数据的分布、模型拟合效果及预测的风险特性。本文将通过详细的概念解析、代码示例及图解,带你深入理解威布尔风险图。
1. 什么是威布尔风险图?
1.1 威布尔分布 (Weibull Distribution)
威布尔分布是一种常用的概率分布,能够有效描述系统的失效行为。它由两个主要参数控制:
形状参数 ( \beta ):描述失效率随时间变化的模式。
- ( \beta < 1 ):失效率随时间减少。
- ( \beta = 1 ):失效率保持恒定(指数分布)。
- ( \beta > 1 ):失效率随时间增加。
- 尺度参数 ( \eta ):表示失效时间的尺度。
威布尔分布的概率密度函数 (PDF) 为:
\[
f(t) = \frac{\beta}{\eta} \left( \frac{t}{\eta} \right)^{\beta - 1} e^{-(t/\eta)^\beta}
\]
1.2 风险函数 (Hazard Function)
风险函数描述了在时间 ( t ) 之后失效的条件概率,即:
\[
h(t) = \frac{f(t)}{1 - F(t)}
\]
其中:
- ( f(t) ):概率密度函数 (PDF)。
- ( F(t) ):累计分布函数 (CDF)。
威布尔风险图通过对风险函数的拟合,直观展示失效风险的变化。
2. 威布尔风险图的用途
- 可靠性分析:分析系统或个体的失效趋势。
- 模型评估:验证数据是否符合威布尔分布。
- 风险预测:识别高风险时间段。
- 决策支持:优化维护计划或医疗干预策略。
3. 如何绘制威布尔风险图?
以下是构建威布尔风险图的完整步骤。
3.1 数据准备
我们以一个设备的失效时间数据为例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import weibull_min
# 生成威布尔分布样本数据
np.random.seed(42)
shape_param = 2.0 # 形状参数 beta
scale_param = 100 # 尺度参数 eta
failure_times = weibull_min.rvs(shape_param, scale=scale_param, size=100)
# 打印部分数据
print("Failure times (samples):", failure_times[:10])
3.2 绘制威布尔分布的概率密度函数 (PDF)
# 生成 PDF 曲线
x = np.linspace(0, 200, 500)
pdf = weibull_min.pdf(x, shape_param, scale=scale_param)
# 绘图
plt.figure(figsize=(8, 6))
plt.hist(failure_times, bins=15, density=True, alpha=0.6, color='b', label='Histogram')
plt.plot(x, pdf, 'r-', lw=2, label='Weibull PDF')
plt.title("Weibull Distribution PDF")
plt.xlabel("Time")
plt.ylabel("Density")
plt.legend()
plt.grid()
plt.show()
3.3 拟合威布尔分布参数
使用数据拟合威布尔分布参数,验证其形状和尺度:
from scipy.stats import exponweib
# 参数拟合
params = exponweib.fit(failure_times, floc=0) # 锁定位置参数为0
beta, eta = params[1], params[3]
print(f"Fitted Shape Parameter (β): {beta}")
print(f"Fitted Scale Parameter (η): {eta}")
3.4 构建威布尔风险图
威布尔风险图的核心是将数据转换为对数坐标系,验证失效数据是否符合威布尔分布。
# 计算风险图数据点
failure_times_sorted = np.sort(failure_times)
rank = np.arange(1, len(failure_times_sorted) + 1)
cumulative_prob = (rank - 0.5) / len(failure_times_sorted) # CDF
# 转换为对数坐标
log_time = np.log(failure_times_sorted)
log_neg_log_prob = np.log(-np.log(1 - cumulative_prob))
# 绘制威布尔风险图
plt.figure(figsize=(8, 6))
plt.scatter(log_time, log_neg_log_prob, color='b', label='Data Points')
plt.title("Weibull Hazard Plot")
plt.xlabel("Log(Time)")
plt.ylabel("Log(-Log(1 - CDF))")
plt.grid()
plt.legend()
plt.show()
4. 威布尔风险图的解读
4.1 数据拟合直线
如果数据点在对数坐标下近似成直线,则表明数据符合威布尔分布。
- 斜率:形状参数 ( \beta )。
- 截距:尺度参数 ( \eta ) 的对数值。
4.2 风险模式
- ( \beta < 1 ):风险减少,适用于早期失效。
- ( \beta = 1 ):风险恒定,适用于随机失效。
- ( \beta > 1 ):风险增加,适用于老化失效。
5. 应用案例
以下是一个完整的威布尔风险图分析流程:
# 全流程:数据生成、拟合、风险图
failure_times = weibull_min.rvs(2.5, scale=120, size=150)
params = exponweib.fit(failure_times, floc=0)
beta, eta = params[1], params[3]
failure_times_sorted = np.sort(failure_times)
rank = np.arange(1, len(failure_times_sorted) + 1)
cumulative_prob = (rank - 0.5) / len(failure_times_sorted)
log_time = np.log(failure_times_sorted)
log_neg_log_prob = np.log(-np.log(1 - cumulative_prob))
plt.figure(figsize=(8, 6))
plt.scatter(log_time, log_neg_log_prob, color='b', label='Data Points')
plt.plot(log_time, beta * log_time - beta * np.log(eta), 'r-', label='Fitted Line')
plt.title("Weibull Hazard Plot with Fitted Line")
plt.xlabel("Log(Time)")
plt.ylabel("Log(-Log(1 - CDF))")
plt.legend()
plt.grid()
plt.show()
print(f"Fitted Shape Parameter (β): {beta}")
print(f"Fitted Scale Parameter (η): {eta}")
6. 总结
6.1 主要内容
- 威布尔风险图 是分析失效数据的有力工具,帮助量化风险随时间的变化。
- 关键参数 ( \beta ) 和 ( \eta ) 提供了失效率的模式与时间尺度。
6.2 学习重点
- 理解威布尔分布的基本概念。
- 掌握风险图的绘制方法。
- 使用 Python 分析实际数据并解读结果。
通过学习威布尔风险图,你可以在可靠性工程、风险预测以及模型验证中更自信地分析和解释数据!
评论已关闭