分位数回归模型quantile regeression应用详解及示例教程

1. 什么是分位数回归模型?

分位数回归模型(Quantile Regression),简称QR,是指在回归分析中,对因变量的一系列条件分位数和中位数进行建模和估计。

与传统的平均数回归模型相比,QR可以更直接地表现出因变量在不同条件下的变化和波动,更准确地描述出回归模型的不确定性。

1.1 QR模型的核心思想

在传统的OLS(Ordinary Least Squares)回归中,我们最小化了残差平方和,也就是最小化了平均意义下的误差。而在QR中,我们关心的是不同条件下的因变量情况,因此,我们考虑通过最小化分位数损失函数来估计回归系数。

损失函数的形式为:

def qreg(y, X, quantile):

# 首先定义一个分位数损失函数

def quantile_loss(y_true, y_pred):

residual = y_true - y_pred

return tf.keras.backend.mean(

tf.keras.backend.maximum(quantile * residual,

(quantile - 1) * residual),

axis=-1)

# 利用keras模型结构构建分位数回归模型

model = tf.keras.models.Sequential([

tf.keras.layers.Dense(1, input_shape=(X.shape[1],))])

model.compile(optimizer='adam', loss=quantile_loss)

# 训练模型

history = model.fit(x=X, y=y, epochs=200, validation_split=0.2, verbose=0)

# 返回模型的系数和history

return model.get_weights()[0], history

1.2 分位数回归的优点

1)不受异常值影响:OLS对异常值非常敏感,一些异常值的出现会导致整个回归分析结果失效。而QR对异常值较为鲁棒,它关注的是因变量的分布情况,因此可以直接处理异常值的影响。

2)允许不同条件下的异质性影响:OLS模型假设回归系数在不同的条件下保持不变,因此不能够反映出因变量在不同条件下的变化。而QR则可以准确地捕捉不同条件下回归系数的异质性影响,使得分析结果更加全面。

3)提供更加全面的回归分析结果:OLS模型只能提供平均意义下的估计结果,无法反映因变量在不同条件下的变化。而QR可以提供多个分位点的估计结果,更加全面地反映出回归分析的不确定性。

2. QR在实际中的应用

下面以一组房价数据为例,展示分位数回归模型的应用过程。

2.1 数据读取和可视化

我们读取Boston Housing数据集中前5个特征的数据,并且可视化。

from sklearn.datasets import load_boston

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

# 读取数据

data = load_boston()

df = pd.DataFrame(data=data.data, columns=data.feature_names)

df['target'] = pd.Series(data.target)

# 可视化数据分布

sns.pairplot(df.iloc[:, 0:5])

plt.show()

运行结果如下图所示:

2.2 数据预处理

我们将房价作为因变量,其他的5个特征作为自变量。另外,为了保证模型的公平性,我们将每个特征进行归一化处理。

# 选取自变量和因变量

X = df.iloc[:, 0:5].values

y = df.iloc[:, -1].values

# 自变量归一化

X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)

# 因变量归一化

y = (y - np.mean(y)) / np.std(y)

2.3 计算回归系数

我们计算分位数为 0.5 的分位数回归模型进行预测。

import tensorflow as tf

from sklearn.metrics import mean_squared_error

# 定义损失函数并拟合模型

params, history = qreg(y, X, 0.5)

# 预测值

y_pred = np.matmul(X, params)

# 可视化预测结果

plt.scatter(y, y_pred)

plt.xlabel('True Values')

plt.ylabel('Predictions')

plt.plot([0, 1], [0, 1], color='red')

plt.show()

运行结果如下图所示:

2.4 分位数回归可视化

我们将比较不同分位数下的分位数回归模型结果,并且将分位点以热力图的形式展示出来。

quantiles = np.linspace(0.1, 0.9, 9)

preds = []

for q in quantiles:

params, _ = qreg(y, X, q)

preds.append(np.matmul(X, params))

# 预测值可视化

plt.boxplot(preds)

plt.xlabel('Quantiles')

plt.ylabel('Predictions')

plt.show()

# 分位数可视化

sns.heatmap(preds)

plt.xlabel('Quantiles')

plt.ylabel('Samples')

plt.show()

运行结果如下图所示:

3. 总结

本文介绍了分位数回归模型的核心思想和优点,以及在实际中如何应用分位数回归模型预测房价,同时还讲解了如何通过热力图的形式可视化不同分位数下的预测结果,希望可以为读者掌握QR模型提供一些帮助。

后端开发标签