4 votos

Biblioteca de Python para devolver el MLE de los modelos Beta Geométrico y Beta Discreto de Weibull

Existe un paquete R llamado predecir que es útil para proyectar la retención de clientes basándose en los modelos Beta Geométrico y Beta Discreto de Weibull.

Estoy teniendo problemas para encontrar algo similar para python, al menos uno tan racionalizado. ¿Alguien sabe de algo que se le ocurra

4voto

Judioo Puntos 625

Las funciones del paquete foretell son llamadas bastante sencillas al paquete R optim con una gestión de datos intermedia. Así que en R si se ejecuta library(foretell);BdW puede ver la definición de la función.

En python, sólo habría que reescribir la llamada a R optim usando scipy minimizar . Aquí hay un breve ejemplo de minimización del mismo ejemplo en los docs de foretell para el BdW modelo:

from scipy.optimize import minimize
from scipy.special import beta
import numpy as np

surv = np.array([100,86.9,74.3,65.3,59.3])
h = 6
t = len(surv)
die = np.diff(-surv)
i = np.arange(0,t) 

def dbw_ll(x):
    a,b,c = x
    s = beta(a,b + i**c)/beta(a,b)
    p = np.diff(-s)
    ll_ = die * np.log(p)
    ll = ll_.sum() + surv[-1]*np.log(s[-1])
    return -ll

bnds = [(0.001,10000)]*3

res = minimize(dbw_ll, x0=[1,1,1], 
               method='L-BFGS-B',
               bounds=bnds)

print(res.x)
# R results 0.2593549 1.7226948 1.5842688 
# agrees for 3 decimals

# projecting out
a, b, c = res.x
k = np.arange(0,t+h)
dbw = (beta(a,b+k**c)/beta(a,b))*100
fitted = dbw[0:t]
projected = dbw[t:]

Es casi el mismo ejercicio para las otras funciones (mapeo de funciones R a python). Sólo tienes que hacer un día de trabajo para envolver estos en buenas funciones en python para replicar la misma funcionalidad en la biblioteca de R foretell. (¡Hice este ejemplo mientras esperaba que terminaran unas consultas!)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X