Загрузка данных


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor

# Предполагаем, что df уже содержит все нужные признаки, а features – список имён
# features = ['duration_months', 'pr_p_n', 'prem_pr_p_n', 'mid_pr_p_n', ...]

# 1. Корреляционная матрица
corr_matrix = df[features].corr()

plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', 
            square=True, linewidths=0.5, cbar_kws={"shrink": 0.8})
plt.title('Корреляционная матрица факторов модели')
plt.tight_layout()
plt.show()

# 2. VIF для каждого фактора
X = df[features]
vif_data = pd.DataFrame()
vif_data['Признак'] = X.columns
vif_data['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]

print("\nТаблица VIF (фактор инфляции дисперсии):")
print(vif_data.to_string(index=False))

# Дополнительно: выделим признаки с VIF > 5 (умеренная) и > 10 (высокая)
vif_data['Уровень'] = vif_data['VIF'].apply(
    lambda x: 'Низкий' if x < 5 else ('Умеренный' if x < 10 else 'Высокий')
)
print("\nИнтерпретация VIF:")
print(vif_data.to_string(index=False))