Si j'ai pris l'ensemble de données et divisé le nombre total de balles qui ont fait sortir un batteur par le nombre total de balles lancées, je peux voir que j'aurais la probabilité moyenne qu'un melon fasse sortir un batteur - ce sera environ 0,03 (j'espère Je ne me suis pas déjà trompé?)
Malheureusement, ce n'est peut-être déjà pas exactement ce que vous recherchez.
Supposons que nous ayons un seul melon et deux batteurs: Don Bradman et moi. (Je sais très peu de choses sur le cricket, donc si je fais quelque chose ici, faites le moi savoir.) Les jeux vont quelque chose comme:
- Don va au bâton et sort sur le 99e bol.
- Je vais au bâton et je sors immédiatement.
- Don va au bâton et sort sur le 99e bol.
- Je vais au bâton et je sors immédiatement.
Dans ce cas, il y a quatre outs sur 200 bols, donc la probabilité marginale pour un joueur de bowling de sortir un batteur est estimée à 4/200 = 2%. Mais vraiment, la probabilité que Don soit absent est plus proche de 1%, alors que la mienne est de 100%. Donc, si vous choisissez un batteur et un melon au hasard, la probabilité que ce melon sorte ce batteur cette fois-ci est plus comme (50% de chances que vous avez choisi Don) * (1% de chances qu'il sorte) + (50% de chances que vous avez choisi moi) * (100% de chance de sortir) = 50,05%. Mais si vous choisissez un terrain au hasard, il y a 2% de chances qu'il sorte. Vous devez donc bien réfléchir au modèle auquel vous pensez.
Quoi qu'il en soit, votre proposition n'est pas folle. Plus symboliquement, soit le lanceur et le batteur; laisser la probabilité que obtient out. Vous dites alors:bmF( b , m )bm
f(b,m)=Em′[f(b,m′)]Eb′[f(b′,m)]Eb′,m′[f(b′,m′)].
Cela a la propriété souhaitée:
il est tout aussi cohérent si vous prenez des moyens sur seulement ou .
Eb,m[f(b,m)]=Eb,m′[f(b,m′)]Eb′,m[f(b′,m)]Eb′,m′[f(b′,m′)]=Eb,m[f(b,m)];
bm
Notez que dans ce cas, nous pouvons affecter
Votre hypothèse est que vous pouvez observer et assez bien à partir des données. Tant que (a) vous avez suffisamment de jeux [ce que vous faites] et (b) que les joueurs se jouent tous avec des fréquences raisonnablement similaires, alors c'est très bien.
C:=Eb,m[f(b,m)]g(b):=Em[f(b,m)]/C−−√h(m):=Eb[f(b,m)]/C−−√so that f(b,m)=g(b)h(m).
g(b)h(m)
Pour élaborer un peu sur (b): imaginez que vous avez des données provenant d'un tas de jeux professionnels et d'un tas de jeux de moi jouant avec mes amis. S'il n'y a pas de chevauchement, peut-être que j'ai l'air vraiment bien par rapport à mes amis, alors peut-être que vous pensez que je suis bien meilleur que le pire joueur professionnel. C'est évidemment faux, mais vous n'avez aucune donnée pour réfuter cela. Si vous avez un petit chevauchement, où j'ai joué contre un joueur professionnel une fois et que j'ai été détruit, les données permettent de me classer, mes amis et moi, bien pire que les pros, mais votre méthode ne l'expliquerait pas. Techniquement, le problème ici est que vous supposez que vous avez un bon échantillon pour par exemple , mais votre distribution est biaisée.Eb′[f(b′,m)]b′
Bien sûr, vos données ne seront pas si mauvaises, mais selon la structure de la ligue ou autre, cela pourrait avoir certains éléments de ce problème.
Vous pouvez essayer de le contourner avec une approche différente. Le modèle proposé pour est en fait une instance de modèles de factorisation matricielle de bas rang communs dans le filtrage collaboratif , comme dans le problème Netflix . Là, vous choisissez la fonction et comme étant de dimension , et vous représentez . Vous pouvez interpréter comme complexifiant votre modèle d'un score de «qualité» unique à des scores selon plusieurs dimensions: peut-être que certains quilleurs réussissent mieux contre certains types de batteurs. (Cela a été fait par exemple pour les matchs de la NBA .)fg(b)h(m)rf(b,m)=g(b)Th(m)r>1
La raison pour laquelle ils sont appelés factorisation matricielle est que si vous créez une matrice avec autant de lignes que de quilleurs et autant de colonnes que de batteurs, vous pouvez l'écrire commeF
⎡⎣⎢⎢⎢⎢⎢f(b1,m1)f(b2,m1)⋮f(bN,m1)f(b1,m2)f(b2,m2)⋮f(bN,m2)……⋱…f(b1,mM)f(b2,mM)⋮f(bN,mM)⎤⎦⎥⎥⎥⎥⎥F=⎡⎣⎢⎢g(b1)⋮g(bN)⎤⎦⎥⎥G⎡⎣⎢⎢h(m1)⋮h(mM)⎤⎦⎥⎥THT
où vous avez factorisé une matrice en une one et une one .
N×MFN×rGM×rH
Bien sûr, vous ne pouvez pas observer directementLe modèle habituel consiste à observer au hasard des entrées bruyantes de ; dans votre cas, vous obtenez d'observer un tirage au sort d'une distribution binomiale avec un nombre aléatoire d'essais pour chaque entrée de .FFF
Vous pouvez construire un modèle de probabilité comme, par exemple:
Gik∼N(0,σ2G)Hjk∼N(0,σ2H)Fij=GTiHjRij∼Binomial(nij,Fij)
où les et sont observés, et vous mettriez probablement des hyperpriors sur / et feriez une inférence par exemple dans
Stan .
nijRijσGσH
Ce n'est pas un modèle parfait: d'une part, il ignore que est corrélé aux scores (comme je l'ai mentionné dans la première section), et plus important encore, il ne contraint pas à être dans (vous utiliseriez probablement un sigmoïde logistique ou similaire pour y parvenir). Un article connexe, avec des a priori plus complexes pour et (mais qui n'utilise pas la vraisemblance binomiale) est: Salakhutdinov et Mnih, factorisation de la matrice probabiliste bayésienne utilisant la chaîne de Markov Monte Carlo , ICML 2008. ( doi / pdf de l'auteur )F i j [ 0 , 1 ] G HnFij[0,1]GH