Para demonstrar uma solução para esse problema de hiperprioridade, implementei um modelo hierárquico gama-Dirichlet-multinomial no PyMC3. A gama anterior para o Dirichlet é especificada e amostrada de acordo com a postagem do blog de Ted Dunning .
O modelo que eu implementei pode ser encontrado neste Gist, mas também é descrito abaixo:
Este é um modelo hierárquico bayesiano (pool) para classificações de filmes. Cada filme pode ser classificado em uma escala de zero a cinco. Cada filme é classificado várias vezes. Queremos encontrar uma distribuição suave de classificações para cada filme.
Vamos aprender uma distribuição anterior de nível superior (hiperprior) nas classificações de filmes a partir dos dados. Cada filme terá seu próprio prior, que é suavizado por esse prior de nível superior. Outra maneira de pensar sobre isso é que a prévia das classificações para cada filme será reduzida para a distribuição em nível de grupo ou agrupada.
Se um filme tiver uma distribuição de classificação atípica, essa abordagem reduzirá as classificações para algo mais alinhado com o esperado. Além disso, esse aprendizado prévio pode ser útil para inicializar filmes com poucas classificações para permitir uma comparação significativa com filmes com muitas classificações.
O modelo é o seguinte:
γk=1...K∼Gamma(α,β)
θm=1...M∼DirichletM(cγ1,...,cγK)
zm=1...M,n=1...Nm∼CategoricalM(θm)
Onde:
- K = 6K número de níveis de classificação de filmes (por exemplo, implica classificações 0, ..., 5)K=6
- M número de filmes avaliados
- mNm número de classificações para o filmem
- α=1/K para fazer com que a coleção de gamma rvs atue como um coeficiente exponencial
- βparâmetro de taxa para o nível superior exponencial anterior
- c parâmetro de concentração que determina a força do nível superior antes
- kγk nível superior anterior ao nível de classificaçãok
- Kθm no nível do filme anterior aos níveis de classificação (multivariado com dimensão = )K
- n mzmn classificação para filmenm