Я пытаюсь получить оптимизированные параметры модели Нельсона-Зигеля. Ниже приведен простой пример, но я знаю, что оптимизированные параметры не полностью оптимизированы и содержат некоторые ошибки/предупреждения.
Я считаю, что предупреждающее сообщение связано с оптимизированными параметрами. Подскажите пожалуйста, как это исправить.
import numpy as np
from scipy.optimize import curve_fit
# Define the Nelson-Siegel model function
def nelson_siegel(tau, beta1, beta2, beta3, lambd):
term1 = beta1
term2 = beta2 * ((1 - np.exp(-lambd * tau)) / (lambd * tau))
term3 = beta3 * (((1 - np.exp(-lambd * tau)) / (lambd * tau)) - np.exp(-lambd * tau))
return term1 + term2 + term3
# Given example data (maturity and yields)
tau = np.array([0.25, 2, 5, 10])
yields = np.array([2.54, 2.36, 2.49, 2.96])
# Calculate dynamic initial estimates
beta1_initial = yields[-1] # Yield for the longest maturity
beta2_initial = yields[0] - yields[-1] # Difference between short-term and long-term yields
beta3_initial = (np.max(yields) - np.min(yields)) / 2 # Curvature is about half of the yield range
lambd_initial = 0.2 # Default value
initial_guess = [beta1_initial, beta2_initial, beta3_initial, lambd_initial]
# Set parameter bounds
param_bounds = ([0, -10, -10, 0.01], # Lower bounds (beta1, beta2, beta3, lambda)
[10, 10, 10, 10]) # Upper bounds (beta1, beta2, beta3, lambda)
# Optimization (using curve_fit)
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)
# Print optimized parameters
beta1, beta2, beta3, lambd = popt
print(f"Optimized Parameters: beta1 = {beta1:.4f}, beta2 = {beta2:.4f}, beta3 = {beta3:.4f}, lambda = {lambd:.4f}")
# Calculate fitted yields using the model
fitted_yields = nelson_siegel(tau, beta1, beta2, beta3, lambd)
# Print fitted values
print(f"Fitted Yields: {fitted_yields}")
# Print the covariance matrix of the optimized parameters
print(f"Parameter Covariance Matrix: {pcov}")
Результаты
Optimized Parameters: beta1 = 10.0000, beta2 = -7.6314, beta3 = 2.8412, lambda = 0.0100
Fitted Yields: [2.38171526 2.47248209 2.62498897 2.87073598]
Parameter Covariance Matrix: [[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]
[inf inf inf inf]]
C:\Users\CHOI\AppData\Local\Temp\ipykernel_32884\269502971.py:29: OptimizeWarning: Covariance of the parameters could not be estimated
popt, pcov = curve_fit(nelson_siegel, tau, yields, p0=initial_guess, bounds=param_bounds, maxfev=10000, ftol=1e-6)
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python
ОптимизируйтеПредупреждение: ковариацию параметров невозможно оценить в Python ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
ОптимизируйтеПредупреждение: ковариацию параметров невозможно оценить в Python
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Подбор гамма-функции. OptimizeWarning: ковариацию параметров невозможно оценить в Python.
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Подбор гамма-функции. OptimizeWarning: ковариацию параметров невозможно оценить в Python.
Anonymous » » в форуме Python - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Подбор гамма-функции. OptimizeWarning: ковариацию параметров невозможно оценить в Python.
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-