2016-09-04 2 views
1

J'essaie de prédire si un fan va se tourner vers un événement sportif ou non. Mes données (pandas DataFrame) se composent d'informations sur les fans (démographiques, etc.), et si elles ont assisté ou non aux 10 dernières correspondances (g1_attend - g10_attend).SVM; les données d'entraînement ne contiennent pas de cible

fan_info age neighborhood g1_attend g2_attend ... g1_neigh_turnout 
2717  22 downtown  0   1    .47 
2219  67 east side  1   1    .78 

Comment puis-je déterminer si elles vont assister g11_attend, quand g11_attend n'existe pas dans la trame de données? À l'origine, j'allais m'intéresser à l'application de certains des modèles de base dans scikit-learn pour la classification, et éventuellement ajouter simplement une colonne g11_attend dans le DataFrame. Tout cela m'a un peu confus pour une raison quelconque. Je pense maintenant qu'il serait plus approprié de considérer cela comme une série chronologique, et je me suis penché sur d'autres modèles.

Répondre

2

Vous avez raison, vous ne pouvez pas simplement ajouter une nouvelle catégorie (c'est-à-dire une classe de sortie) à un classificateur - cela nécessite quelque chose qui fait des séries temporelles.

Mais il existe une technique assez standard pour utiliser un classificateur sur des séries temporelles. Affirmer (conditionnellement) l'indépendance du temps, et utiliser le fenêtrage. En bref, nous allons faire l'hypothèse que si quelqu'un assiste à une partie dépend seulement des variables que nous avons capturées, et non d'un autre facteur de temps (ou d'un autre facteur en général). Par exemple, nous supposons que nous pouvons traduire leur histoire de jeux suivis autour de l'année et ce sera toujours la même probabilité. Ceci est clairement faux, mais nous le faisons de toute façon parce que les techniques d'apprentissage par ordinateur traiteront avec un certain bruit dans les données. Il est manifestement erronée parce que certaines personnes vont éviter les jeux en hiver cos il est trop froid, etc.

Alors maintenant sur le classificateur:

Nous avons des entrées, et nous voulons juste une sortie. L'idée de base est que nous allons former un modèle, qui donné en entrée si elles ont assisté aux 9 premiers jeux, prédit si elles assisteront à la

entrées donc sur sont age, neighbourhood, g1_attend, g2_attend, ... g9_attend et la sortie est g10_attend - une valeur binaire.

Ceci nous donne des données d'entraînement.

Puis, quand il le temps de le tester, nous allons tout accross: changer g1_attend pour g2_attend et g2_attend pour g3_attend et ... et g9_attend pour g10_attend. Et puis notre sortie de prédiction sera pour g11_attend.

Vous pouvez également former plusieurs modèles avec différentes tailles de fenêtres. Par exemple en regardant seulement les 2 derniers matchs, pour prédire la présence de la 3ème. Cela vous donne beaucoup plus de données de trainind, puisque vous pouvez le faire. g1,g2 ->g3 et g2,g3 ->g4 etc. pour chaque rangée.

Vous pouvez former un groupe de différentes tailles de fenêtre et fusionner les résultats avec une technique d'ensemble.

En particulier, il est une bonne idée de former g1,...,g8 ->g9, et utiliser alors que pour prédire g10 (en utilisant g2,...,g9 comme entrées) pour vérifier si elle fonctionne.

Je suggère à l'avenir, vous pouvez poser ces questions sur Cross Validated. Même si cela peut être sujet de débordement de pile, c'est plus sur le sujet, et a beaucoup plus de statisticiens et d'experts en apprentissage automatique.


Je suggère de jeter fan_id pour l'instant comme une entrée. Je ne pense pas que cela vous mènera nulle part, mais il est hors de question d'expliquer pourquoi.

+0

Merci pour l'explication détaillée. J'avais l'impression qu'un classificateur exigerait d'utiliser g10 comme une sorte de proxy pour g11. Je vais essayer cette méthode pour mettre en place des techniques de classification. – srytoomanyquestions

+0

Vous pouvez marquer votre propre question et demander qu'elle soit migrée vers Cross Validated, vous obtiendrez probablement de meilleures réponses. Aussi, ne soyez pas si rapide à cliquer accepter, cela diminue vos chances d'obtenir une meilleure réponse de quelqu'un d'autre. Vous pouvez attendre et cliquer sur accepter un que vous essayez la réponse et savoir que cela fonctionne. –

+0

merci encore; Je vais le signaler et voir ce que les mods disent. Je pense que votre réponse a beaucoup aidé. Je pensais que cela pouvait être traité de plusieurs façons et appliqué à différents types de modèles, donc c'était assez déroutant. Maintenant que vous avez confirmé comment procéder avec les modèles de classification, je peux le faire et/ou jeter un coup d'œil à d'autres approches (je cherchais peut-être à utiliser un MCMC par exemple) – srytoomanyquestions