После этого урока я создал churn.py
файл:
import numpy as np
import scipy as sp
import scipy.stats as stats
#duration of alive subscriptions
censored = np.array([419,513, ... ,316,14])
#duration of completed subscriptions
uncensored = np.array([389,123,340, ... ,56,31])
#Log likelihoods for censored data
def log_likelihood_lomax(args):
shape, scale = args
val = stats.lomax.logpdf(uncensored, shape, loc=0, scale=scale).sum() + stats.lomax.logsf(censored, shape, loc=0, scale=scale).sum()
return -val
res_lomax = sp.optimize.minimize(log_likelihood_lomax, [1, 1], bounds=((0.001, 1000000), (0.001, 1000000)))
print("lomax shape", res_lomax.x[0], ", scale=", res_lomax.x[1])
print("lomax mean", stats.lomax.mean(res_lomax.x[0], scale=res_lomax.x[1]))
print("lomax median", stats.lomax.median(res_lomax.x[0], scale=res_lomax.x[1]))
Примечание : ...
в censored
& uncensored
массивы здесь для целей конфиденциальности.В настоящий сценарий я включил реальные значения.
Когда я запускаю этот сценарий с python3 churn.py
, я получаю следующие результаты:
lomax shape 0.36948878639375643 , scale= 1440.4384891101636
lomax mean inf
lomax median 7961.447172364986
Я знаю дляфакт, что значение, возвращаемое для медианы, неверно.
Но самое главное, я не понимаю, почему среднее значение lomar возвращает inf
.
Что-то не так в моем сценарии?