2009-07-23 10 views
7

J'ai une base de données, constituée d'un ensemble d'enregistrements (environ 600 000) dont certains champs sont manquants. Mon but est de trouver un moyen de prédire ce que les valeurs de données manquantes devraient être (afin que je puisse les remplir) en fonction des données existantes. Une option que je regarde est la mise en grappe - ie représenter les enregistrements qui sont tous complets en tant que points dans un espace, en recherchant des groupes de points, puis quand on donne un enregistrement avec des valeurs de données manquantes, essayer de savoir s'il y a Toutes les grappes qui pourraient appartenir à cette catégorie sont cohérentes avec les valeurs de données existantes. Cependant, cela peut ne pas être possible parce que certains des champs de données sont sur une échelle nominale (par exemple la couleur) et ne peuvent donc pas être mis en ordre. Une autre idée que j'ai eue est de créer une sorte de modèle probabiliste qui permettrait de prédire les données, de les former sur les données existantes, puis de les utiliser pour extrapoler.Prédire les valeurs de données manquantes dans une base de données

Quels algorithmes sont disponibles pour faire ce qui précède, et existe-t-il un logiciel disponible gratuitement qui implémente ces algorithmes (Ce logiciel va être en C# d'ailleurs).

+2

Énorme problème. Très dépendante de beaucoup de choses que nous ne pouvons pas prédire. Instance la plus simple: existe-t-il des biais de sélection dans lesquels les enregistrements ont des champs manquants? Comment le sais-tu? Que peux-tu y faire? Existe-t-il des indicateurs proxy disponibles? Et ainsi de suite ... – dmckee

+1

D'accord avec le commentaire ci-dessus. Il y a peut-être des algorithmes généraux que vous pourriez utiliser, mais vous devrez personnaliser chacun d'entre eux dans votre domaine. – job

Répondre

7

traitement des valeurs manquantes est une question méthodique qui doit faire avec le sens réel de la Les données.

Plusieurs méthodes que vous pouvez utiliser (post on my blog détaillé):

  1. ignorera la ligne de données. Ceci est généralement fait lorsque l'étiquette de classe est manquante (en supposant que votre objectif d'exploration de données est la classification), ou que de nombreux attributs sont manquants dans la ligne (pas un seul).Cependant, vous obtiendrez évidemment des performances médiocres si le pourcentage de ces lignes est élevé.

  2. Utilisez une constante globale pour remplir les valeurs manquantes. Comme "inconnu", "N/A" ou moins l'infini. Ceci est utilisé parce que parfois n'a pas de sens pour essayer de prédire la valeur manquante. Par exemple, si vous avez un DB si, par exemple, les candidats des collèges et de l'Etat de résidence manque pour certains, le remplir ne fait pas beaucoup de sens ...

  3. Utiliser l'attribut signifie. Par exemple, si le revenu moyen d'une famille américaine est X, vous pouvez utiliser cette valeur pour remplacer les valeurs de revenu manquantes.

  4. Utiliser l'attribut mean pour tous les échantillons appartenant à la même classe. Disons que vous avez une tarification des voitures qui, entre autres choses, classe les voitures à «luxe» et «budget faible» et vous avez affaire à des valeurs manquantes dans le domaine des coûts. Remplacement de coûts manquants d'une voiture de luxe avec le coût moyen de toutes les voitures de luxe est probablement plus précise la valeur que vous obtiendriez si vous facteur dans les voitures à petit budget

  5. Utiliser algorithme d'exploration de données pour prédire la valeur. La valeur peut être déterminée en utilisant la régression, les outils basés sur l'inférence en utilisant le formalisme Baysian, les arbres de décision, les algorithmes de clustering utilisés pour générer la méthode d'étape # 4 (K-Mean \ Median etc.). (Génération d'arbre ID3) car ils sont relativement faciles et il y a beaucoup d'exemples sur le net.

En ce qui concerne les paquets, si vous pouvez vous le permettre et vous êtes dans le regard du monde Microsoft à SQL Server Analysis Services (SSAS pour faire court) qui mettent en œuvre la plupart des mentionné ci-dessus.

Voici quelques liens vers des progiciels de minning de données gratuit:

Bien que C#, il est une très bonne intro aux arbres de décision et à l'apprentissage baysien (en utilisant Ruby): http://www.igvita.com/2007/04/16/decision-tree-learning-in-ruby/ http://www.igvita.com/2007/05/23/bayes-classification-in-ruby/

Il y a aussi cette bibliothèque Ruby que je trouve très utile (aussi à des fins d'apprentissage): http://ai4r.rubyforge.org/machineLearning.html

Il devrait y avoir beaucoup d'échantillons pour ces algorithmes en ligne dans toutes les langues, donc je suis sûr que vous allez facilement trouver C# choses aussi ...

Modifié:

oublié dans mon poste d'origine. C'est un must have si vous jouez avec l'exploration de données ... Télécharger Microsoft SQL Server 2008 Data Mining Add-ins for Microsoft Office 2007 (Il nécessite SQL Server Analysis Services - SSAS - qui n'est pas gratuit mais vous pouvez télécharger un essai). Cela vous permettra de jouer facilement et d'essayer les différentes techniques dans Excel avant de partir et de mettre en œuvre ce matériel vous-même.Là encore, puisque vous êtes dans l'écosystème Microsoft, vous pourriez même décider d'opter pour une solution basée sur SSAS et compter sur les gars de SQL Server pour le faire pour vous :)

2

La prévision de valeurs manquantes est généralement considérée comme faisant partie de la phase de nettoyage des données qui doit être effectuée avant que les données ne soient extraites ou analysées plus avant. Ceci est assez important dans les données du monde réel.

S'il vous plaît jeter un oeil à cet algorithme http://arxiv.org/abs/math/0701152

Actuellement Microsoft SQL Server Analysis Services 2008 est également livré avec des algorithmes comme ceux-ci http://technet.microsoft.com/en-us/library/ms175312.aspx qui aident à la modélisation prédictive des attributs.

acclamations

+0

Nice. Mais l'article semble faire l'hypothèse implicite qu'il n'y a pas de biais de sélection. Ou ai-je oublié quelque chose? – dmckee

6

C'est moins d'un algorithmiques et plus d'une question philosophique et méthodologique. Il existe quelques techniques différentes pour aborder ce genre de question. Acock (2005) donne une bonne introduction à certaines méthodes. Bien qu'il puisse sembler qu'il y ait beaucoup de maths/statistiques impliquées (et peut sembler beaucoup d'effort), cela vaut la peine de penser à ce qui se passerait si vous vous trompiez.

Andrew blog de Gelman est aussi une bonne ressource, même si la fonctionnalité de recherche sur son blog laisse à désirer ...

Hope this helps.


Acock (2005)

http://oregonstate.edu/~acock/growth-curves/working%20with%20missing%20values.pdf

Andrew le blog de Gelman

http://www.stat.columbia.edu/~cook/movabletype/mlm/

Questions connexes