Я пытаюсь построить полусложную байесовскую модель PyMC3 с использованием нескольких предикторов.Я думаю, что моя проблема связана с отсутствием понимания с моей стороны о том, как правильно построить эти модели.Я либо получаю ошибку:
TypeError: Для compute_test_value одно входное тестовое значение не имеет запрошенного типа.
Ошибка при преобразовании тестового значения втип этой переменной:
Неверное количество измерений: ожидается 0, получено 1 с формой (53724,).
или я установил параметр формы для N и X надлина набора данных, и у меня заканчивается ОЗУ (в любом случае это кажется неуместным, поэтому я не удивлен).
Моя первоначальная стратегия заключалась в построении модели, которая прогнозирует общую стоимость на основе умножения прогнозируемых количеств требований.по средней цене за заявку, где количество претензий и средние значения соответствуют их собственным соответствующим распределениям (Ноль-завышенный отрицательный бином и Гамма, соответственно).Каждый из них построен с использованием линейной комбинации весов на основе нескольких предикторов из моего набора данных.Неправильно ли я к этому подхожу?
Код
from pymc3 import *
with Model() as model:
# Priors
psi_N = Uniform('psi_N', lower=0, upper=1)
alpha_N = HalfCauchy('alpha_N', beta=1)
sigma_X = HalfCauchy('sigma_X', beta=1)
mu_N_noise = StudentT('mu_N_noise', nu=3, mu=0, sd=1)
mu_N_MT = StudentT('mu_N_MT', nu=3, mu=0, sd=1, shape=num_MT)
mu_N_V = StudentT('mu_N_V', nu=3, mu=0, sd=1, shape=num_V)
mu_N_G = StudentT('mu_N_G', nu=3, mu=0, sd=1, shape=num_G)
mu_N_A = StudentT('mu_N_A', nu=3, mu=0, sd=1, shape=num_A)
mu_N_RA = StudentT('mu_N_RA', nu=3, mu=0, sd=1, shape=num_RA)
mu_N_TI = StudentT('mu_N_TI', nu=3, mu=0, sd=1, shape=num_TI)
mu_N_RS = StudentT('mu_N_RS', nu=3, mu=0, sd=1)
mu_N_MM = StudentT('mu_N_MM', nu=3, mu=0, sd=1)
mu_N_IP = StudentT('mu_N_IP', nu=3, mu=0, sd=1)
mu_N_OP = StudentT('mu_N_OP', nu=3, mu=0, sd=1)
mu_N_P = StudentT('mu_N_P', nu=3, mu=0, sd=1)
mu_N_O = StudentT('mu_N_O', nu=3, mu=0, sd=1)
mu_N_Rx = StudentT('mu_N_Rx', nu=3, mu=0, sd=1)
mu_X_noise = StudentT('mu_X_noise', nu=3, mu=0, sd=1)
mu_X_MT = StudentT('mu_X_MT', nu=3, mu=0, sd=1, shape=num_MT)
mu_X_V = StudentT('mu_X_V', nu=3, mu=0, sd=1, shape=num_V)
mu_X_G = StudentT('mu_X_G', nu=3, mu=0, sd=1, shape=num_G)
mu_X_A = StudentT('mu_X_A', nu=3, mu=0, sd=1, shape=num_A)
mu_X_RA = StudentT('mu_X_RA', nu=3, mu=0, sd=1, shape=num_RA)
mu_X_TI = StudentT('mu_X_TI', nu=3, mu=0, sd=1, shape=num_TI)
mu_X_RS = StudentT('mu_X_RS', nu=3, mu=0, sd=1)
mu_X_MM = StudentT('mu_X_MM', nu=3, mu=0, sd=1)
mu_X_IP = StudentT('mu_X_IP', nu=3, mu=0, sd=1)
mu_X_OP = StudentT('mu_X_OP', nu=3, mu=0, sd=1)
mu_X_P = StudentT('mu_X_P', nu=3, mu=0, sd=1)
mu_X_O = StudentT('mu_X_O', nu=3, mu=0, sd=1)
mu_X_Rx = StudentT('mu_X_Rx', nu=3, mu=0, sd=1)
# Deterministic combination of variates using priors to generate the primary variables
mu_N = Deterministic('mu_N', mu_N_noise + mu_N_MT[MetalTier] + mu_N_V[Variant] + mu_N_G[Gender] + mu_N_A[AgeBand] + mu_N_RA[RatingArea] + mu_N_TI[TobaccoIndicator] +
mu_N_RS * RS17 + mu_N_MM * MM + mu_N_IP * IP_Count + mu_N_OP * OP_Count + mu_N_P * Prof_Count + mu_N_O * Other_Count + mu_N_Rx * Rx_Count)
mu_X = Deterministic('mu_X', mu_X_noise + mu_X_MT[MetalTier] + mu_X_V[Variant] + mu_X_G[Gender] + mu_X_A[AgeBand] + mu_X_RA[RatingArea] + mu_X_TI[TobaccoIndicator] +
mu_X_RS * RS17 + mu_X_MM * MM + mu_X_IP * IP_Avg + mu_X_OP * OP_Avg + mu_X_P * Prof_Avg + mu_X_O * Other_Avg + mu_X_Rx * Rx_Avg)
# Primary variables, Frequency (N) and Severity (X)
N = ZeroInflatedNegativeBinomial('N', psi=psi_N, mu=mu_N, alpha=alpha_N)#, shape=len(x_train))
X = Gamma('X', mu=mu_X, sd=sigma_X)#, shape=len(x_train))
# Model error
sigma_y = Normal('sigma_y', mu=0, sd=1e3)
# Expected value
y_hat = N * X
# Data likelihood
y_like = Normal('y_like', mu=y_hat, sd=sigma_y, observed=y_train.values)
Я ожидаю, что модель сможет скомпилироваться без ошибок или нехватки ОЗУ (на компьютере с 64 ГБ памяти).).Нужно ли разделить это на две отдельные модели?