跳转至

统计

因子半衰期

对于一个时间序列,我们可以构建一个逐渐衰减的时间序列模型来估计其半衰期。本文介绍了两个模型,用于估计一个时间序列的半衰期。

在量化研究中,了解各个因子的衰减情况,可以更有效地动态分配因子权重,以适应市场变化。

image-20240612194448624

计算部分相关系数矩阵

本文使用相关系数的矩阵表达形式,实现了计算部分相关系数矩阵的加速算法,并实证检验了三种计算相关系数矩阵方法的运行速度。

  • 在计算部分相关系数矩阵时,自定义的加速算法 相比 Pandas .corr() 方法提速约 2180 倍,比 Numpy .corrcoef() 方法提速约 115 倍。
  • 在计算全部相关系数矩阵时,Numpy .corrcoef() 方法比自定义的加速算法略快 \(10\%\),比 Pandas .corr() 方法快约 20 倍。

使用 Conformal Learning 预测企业信贷违约情况

本文使用 8 种经典的分类器,基于逆概率错误进行 Conformal Learning。

本文使用了 nonconformist 包,它在使用 Conformal Learning 进行分类预测时的核心步骤是:

  1. 在训练集上训练,这一步和常规的机器学习训练相同。
  2. 在校准集上校准,得到每个校准集样本属于每个标签的预测概率。
  3. 用一个 ErrFunc 衡量每个校准集样本的预测效果,作为 nonconformity score。最简单的是 InverseProbabilityErrFunc,它等于 1-predict_probability[true_y]。例如,某个样本的真实标签是 1,而模型预测出该样本属于标签 1 的概率是 0.9,则 ErrFunc 的值是 1-0.9=0.1。
  4. 在测试集上测试,得到每个测试集样本属于每个标签的预测概率。
  5. 用 ErrFunc 衡量每个测试集样本的预测效果。
  6. 对每一个测试集样本,计算:有多少比例的校准集样本的 nonconformity score 大于或等于当前测试样本的 nonconformity score,记为 p。p 越大,说明校准集中有非常多的样本比当前测试集样本的预测效果更差,说明第 j 个测试样本属于第 i 个类的可能性越大。
  7. 返回 p > significance。得到一个 N*2 的 True 和 False 组成的二维矩阵,每一行代表一个测试集样本,每一列代表是否将该标签纳入该样本的 prediction set 中。

image-20230606154615357

本项目的完整展示文件在这里

Conformal Learning 求解回归问题和多标签分类问题

Conformal Learning 是一种非参数统计方法,利用“样本属于某个标签时的离群程度”来进行回归和分类。本文分别使用“老忠实泉的爆发和等待时间数据”进行回归预测,使用“玻璃分类数据”进行多标签分类预测。

参考文献:A Tutorial on Conformal Prediction

回归问题

  1. 对于训练集的某一个样本 \(i\),找到离样本 \(i\) 最近的样本。

    • 若最近的样本只有一个,记为样本 \(j\),则计算样本 \(i\) 和 样本 \(j\) 的标签之间的差值的绝对值;

    • 若最近的样本有多个,则先计算这多个样本的标签的中位数,再将样本 \(i\) 的标签值与该中位数做差后取绝对值。

  2. 此“绝对值”就衡量了样本 \(i\) 的离群程度。

  3. 对于一个新样本 \(n\),同样找到离样本 \(n\) 最近的样本,用“离样本 \(n\) 最近的一个或多个样本的标签的中位数”作为新样本的标签预测值。

  4. 根据信心水平 \(level\)(例如 \(90\%\)),选定一个离群程度,使得该离群程度在所有训练样本的离群程度中的大小排名分位数是 \(1-level\)(例如 \(10\%\),即100个数中第10大的数)。

  5. 在该预测值的基础上加减上一步选定的离群程度,就得到新样本标签值的预测区间。

分类问题

  1. 对于一个新样本,为其赋予所有可能的标签后,将其纳入训练样本中,形成一个 Bag。
  2. 对于 Bag 中的每一个样本:
    1. 对于与该样本的标签相同的其他样本,计算它们与该样本的距离,从中选择最小的,作为分子。
    2. 对于与该样本的标签不同的其他样本,计算它们与该样本的距离,从中选择最小的,作为分母。
    3. 将前两步的分子除以分母,即可衡量“为该样本赋予该标签时的离群程度”。该值越大,说明分子越大、分母越小。
      • 分子越大,说明虽然标签相同但距离很远,可以推测这个样本很可能并不属于这个标签。
      • 分母越大,说明虽然标签不同但距离很近,可以推测这个样本很可能属于其他标签。
  3. 对于每一个可能的标签,根据信心水平 \(level\)(例如 \(90\%\)),判断:当新样本确实属于这个标签时,Bag 中有多少比例样本的离群程度比新样本的离群程度更高。如果这个比例超过了 \(1-level\)(例如 \(10\%\)),则将这个标签加入到预测标签集中。
  4. 输出预测标签集,它可能有一个或多个预测值,也可能是空集。

多重假设检验

本文使用 Benjamini-Hochberg Procedure 和 Adaptive z-value Procedure 进行多重假设检验,在实际数据上验证了后者的优势,并展示了估计原假设的分布参数的重要性。

image-20230503022842066

为什么 P 值是均匀分布的?

在学习多重假设检验时,提到了“P 值是均匀分布的”这个结论。本文对“单边检验”和“双边检验”的情形,证明了 P 值是均匀分布的。

直觉理解

直觉理解

以单边左侧检验为例(单边检验最好理解,不用考虑两侧的情况),可以这样想:

P 值小于 \(0.25\) 意味着什么?意味着观测到的统计量要小于 \(0.25\) 分位数。

观测到的统计量小于 \(0.25\) 分位数的概率是多少?就是 \(0.25\)

也就是说,P 值小于 \(0.25\) 的概率就是 \(0.25\)

\(0.25\) 换成任何一个 \(0\)\(1\) 之间的值,都可以得到:P 值小于某个数的概率就是这个数本身。这就是均匀分布。

证明

单边检验

使用不同惩罚项的线性回归进行变量选择

本文使用 SCAD、LASSO、Ridge 和 Garrote 惩罚项对线性回归进行了建模,在模拟数据下验证了不同惩罚项设计的对稀疏系数的选择能力。

原始论文的标题叫做 Variable Selection via Nonconcave Penalized Likelihood and Its Oracle Properties。对于 Oracle Properties,在 统计之都上有一个非常精彩的解释

Oracle 这个词对应的中文翻译叫做“神谕”,就是神的启示,它是指通过媒介(男女祭司或器物)传达神的难以捉摸或谜一般的启示或言语。在罚函数(比如 LASSO) 的研究领域,Oracle 指的是以下的渐进性质:

  1. 真值为 0 的参数的估计也为 0。
  2. 真值不为 0 的参数的估计值一致收敛到真值,并且协方差矩阵不受那些真值为 0 的参数估计的影响。

简而言之:罚函数的估计结果就好像事先已经得到了神的启示,知道哪些是真值为 0 的参数一样。

极大似然估计与最小均方误差的等价性

在使用最小二乘法估计线性模型的参数时,我们通常会将目标函数写成最小化均方误差的形式: $$ \hat\beta = \min_{\beta} \sum_{i=1}^n {\color{red}{(y_i - x_i^T \beta)^2}} $$

为什么我们要用 均方误差 作为损失函数?而不是绝对值误差、绝对值的三次方误差等其他形式?本文推导了极大似然估计与最小均方误差的等价性,说明最小均方误差是一种合理的做法。

稀疏高维协方差矩阵的 Thresholding 估计方法

高维协方差矩阵的一个重要特征就是许多维度之间的协方差非常接近于 0,一个自然的想法就是将矩阵中绝对值太小的元素设为 0,这种方法就是 Thresholding(门限):通过设定某个门限,将绝对值小于该门限的元素设为 0,只保留绝对值大于或等于该门限的元素。

通过 Thresholding 估计方法,我们可以得到一个比样本协方差矩阵更稀疏的估计。学术界提出了两种设置 Thresholding 的方法:Universal thresholding(统一截断)和 Adaptive thresholding(自适应截断)。前者对矩阵中的每一个元素均采用相同的门限标准,而后者基于样本协方差估计的标准误自适应地为每个元素设定门槛。

本文使用模拟的高斯分布数据和真实的高维 DNA 基因数据,比较了 Universal thresholding 和 Adaptive thresholding 的估计效果,所得结果与 Tony Cai & Weidong Liu (2011) 中的结果基本一致。

png

手动实现交叉验证的收获

在实现交叉验证时,要清楚一共有几个循环。每一个候选的超参数,都要在所有折上做训练和验证!

例如,一共有 10 个候选的超参数,进行 5 折交叉验证,那么需要对这 10 个超参数都训练、验证 5 次,一共训练、验证 50 次。

在编码的过程中,我最开始误将一个参数在一个折上做训练和验证,这样做并不能达到交叉验证的效果。

普通最小二乘估计的假设条件

  1. 因变量\(Y\)与自变量\(X\)之间是 线性 关系。
  2. 自变量之间 不存在多重共线性 ,即\(\left(X^{\prime} X\right)^{-1}\)存在。
  3. 误差项的 条件均值为\(0\) ,即\(E\left[u \mid X\right]=0\)
  4. 误差项之间 同方差且不相关 ,即\(E\left[u u^{\prime} \mid X\right]=\sigma^2 I_T\)
  5. \(\left(Y_t, X_t\right)\) 独立同分布
  6. 误差项是 正态分布 的。

假设 1-4 可推出:普通最小二乘估计是最小方差线性无偏估计(BLUE)。

假设 1-3 与假设 5 可推出:普通最小二乘估计具有一致性

假设 6 并不影响普通最小二乘估计是最小方差线性无偏估计,它是为了便于在有限样本下对回归系数进行统计检验。

普通最小二乘估计的方差与高斯 - 马尔可夫定理

本文计算了普通最小二乘估计的方差,并证明了高斯 - 马尔可夫定理。

普通最小二乘估计的方差:

\[ \begin{aligned} \operatorname{Var}(\underbrace{\beta^{O L S}}_ {(K+1) \times 1} \mid X)&=\sigma^2 \underbrace{\left(X^{\prime} X\right)^{-1}} _ {(K+1) \times (K+1)} \end{aligned} \]

高斯 - 马尔可夫定理(Gauss-Markov Theorem)

在线性回归模型中,如果线性模型满足高斯马尔可夫假定,则回归系数的最佳线性无偏估计(BLUE, Best Linear Unbiased Estimator)就是普通最小二乘法估计。

线性回归的普通最小二乘估计

ols

本文推导了线性回归的普通最小二乘估计量的矩阵形式,并在一元线性回归的情境下给出了求和形式的表达式。 $$ Y=X \widehat{\beta}+e $$

\[ \beta^{O L S}=\left(X^{\prime} X\right)^{-1} X^{\prime} Y \]

在一元线性回归的情境下:

\[ \beta_1^{O L S} =\frac{\overline{X Y}-\overline{X} * \overline{Y}}{\overline{X^2}-\left(\overline{X}\right)^2} \]
\[ \beta_0^{O L S} =\frac{\overline{X^2} * \overline{Y}-\overline{X} * \overline{X Y}}{\overline{X^2}-\left(\overline{X}\right)^2} \]

在 pandas 中计算方差

pandas 默认的.var()方法计算的是样本方差,即自由度为\(N-1\)。若想计算总体方差,需指定参数ddof=0(1)。

  1. Delta Degrees of Freedom。当指定ddof时,计算方差的分母为N-ddof

总结

  • pandas 中的var()默认的自由度是 n-1,即var(ddof=1)
  • NumPy 中的var()默认的自由度是 n,即var(ddof=0)
  • pandas 中的var(ddof=0)相当于 NumPy 中的 var()

随机抽样之 MCMC 算法

MCMC 算法是一种随机抽样算法。借助建议分布,可以在各个样本状态之间进行转移,最终得到目标分布的样本。本文使用了逐分量 MCMC、随机游走和独立性抽样构造 Ising 分布和二元正态分布的随机样本。

png

方差分解公式

应用重期望公式,证明方差分解公式。 $$ \operatorname{Var}(X)=\operatorname{Var}(\mathrm{E}[X \mid Y])+\mathrm{E}[\operatorname{Var}(X \mid Y)] $$

基于 EM 算法的多元高斯混合模型聚类及其 Python 实现

基于 EM 算法,推导多元高斯混合模型聚类的参数迭代公式,并使用 Python 对数据集进行聚类和各类别的参数求解。

在编写代码的过程中,遇到了一个非常简单但一直没发现的 Bug。

定义数组用all_density = np.array([0]*K),再用all_density[k] = k_density并不会让all_density的第k个元素改变。这是因为all_density是介于 0 到 1 之间的,而在定义all_density的时候没有指定数组内部的数据类型,默认是不支持小数的,因此赋值之后all_density的第k个元素仍然是 0。

解决方法:定义数组的时候一定要指定元素的数据类型,指定为dtype=flout64就可以存储高精度的浮点数。

result

有约束的优化问题之 Lagrangian 乘子法、投影梯度算法和罚函数法

使用 Lagrangian 乘子法、投影梯度算法、罚函数法求解有约束的优化问题。

Lagrangian 乘子法

Lagrangian 乘子的具体形式

\[ L(x, y, \lambda) = x^2 + 5y^2 + xy + \lambda(x^2 + y^2 - 1) \]

对偶问题

\[ \max_{\lambda} g(\lambda)\\\ \text{ s.t. } \lambda \geq 0 \]
\[ \text{where } g(\lambda) = \min_{x, y} L(x, y, \lambda) \]

迭代次数与自变量取值 - 投影梯度算法

梯度下降法及其 Python 实现

用数值近似法求函数在某点的梯度,用回溯线搜索法控制步长,应用梯度下降法求函数极值。

梯度下降的思想是:对某一初始值,不断改变这一初始值,且每一步都朝着能使函数值减小的方向改变,最终函数值几乎不再变小,我们就认为达到了极小值点。

迭代轨迹与等高线图