2009-07-23 15 views
7

Tengo una base de datos, que consiste en un montón de registros (alrededor de 600,000) donde algunos de los registros tienen ciertos campos faltantes. Mi objetivo es encontrar una manera de predecir cuáles deberían ser los valores de datos faltantes (para poder completarlos) en función de los datos existentes.Predicción de valores de datos faltantes en una base de datos

Una opción que estoy buscando es la agrupación, es decir, representar los registros que están completos como puntos en algún espacio, buscar agrupaciones de puntos y luego, cuando se da un registro con valores de datos faltantes, intentar averiguar si hay los clústeres que podrían pertenecer que sean consistentes con los valores de datos existentes. Sin embargo, esto puede no ser posible porque algunos de los campos de datos están en una escala nominal (por ejemplo, color) y, por lo tanto, no se pueden ordenar.

Otra idea que tuve fue crear algún tipo de modelo probabilístico que pudiera predecir los datos, entrenarlos en los datos existentes y luego usarlos para extrapolarlos.

Qué algoritmos hay disponibles para hacer lo anterior, y hay algún software disponible que implemente esos algoritmos (este software va a estar en C# por cierto).

+2

Enorme problema. Muy dependiente de muchas cosas que no podemos predecir. La instancia más simple: ¿hay algún sesgo de selección en el que los registros tengan campos faltantes? ¿Cómo lo sabes? ¿Qué puedes hacer al respecto? ¿Hay indicadores proxy disponibles? Y así sucesivamente ... – dmckee

+1

Estoy de acuerdo con el comentario anterior. Puede haber algunos algoritmos generales, ideas que podrías usar, pero tendrías que personalizar cada una de ellas en tu dominio. – job

Respuesta

7

Tratar con valores perdidos es una cuestión metódica que tiene que ver con el significado real de la datos.

varios métodos que puede utilizar (detallan post on my blog):

  1. ignorar la fila de datos. Esto generalmente se hace cuando falta la etiqueta de clase (suponiendo que su objetivo de minería de datos es la clasificación), o faltan muchos atributos de la fila (no solo uno).Sin embargo, obviamente tendrá un bajo rendimiento si el porcentaje de filas es alto

  2. Utilice una constante global para completar los valores faltantes. Me gusta "desconocido", "N/A" o menos infinito. Esto se usa porque a veces no tiene sentido intentar y predecir el valor perdido. Por ejemplo, si tiene un DB si, por ejemplo, faltan candidatos y estado de residencia, llenarlo no tiene mucho sentido ...

  3. Utilice el atributo. Por ejemplo, si el ingreso promedio de una familia estadounidense es X, puede usar ese valor para reemplazar los valores de ingresos faltantes.

  4. Utilice la media del atributo para todas las muestras que pertenecen a la misma clase. Supongamos que tiene un banco de precios de automóviles que, entre otras cosas, clasifica los autos en "Lujo" y "Bajo presupuesto" y se trata de valores perdidos en el campo de costos. Sustitución de coste falta de un automóvil de lujo con el costo promedio de todos los coches de lujo es probablemente más precisa a continuación, el valor que se obtendría si se toma en cuenta los coches de bajo presupuesto

  5. uso de algoritmos de minería de datos para predecir el valor. El valor puede determinarse usando regresión, herramientas basadas en inferencia usando el formalismo Baysiano, árboles de decisión, algoritmos de agrupación usados ​​para generar datos de entrada para el método de paso # 4 (K-Mean \ Median etc.) Sugiero buscar primero árboles de regresión y decisión (Generación de árbol ID3) ya que son relativamente fáciles y hay muchos ejemplos en la red.

En cuanto a los paquetes, si se lo puede permitir y que está en el mundo miran a Microsoft SQL Server Analysis Services (SSAS para abreviar) que desarrollan la mayor parte de los mencionados anteriormente.

Éstos son algunos enlaces a los paquetes de software de datos sin minning:

Aunque no en C# que es una muy buena introducción a árboles de decisión y aprendizaje baysiano (usando Ruby): http://www.igvita.com/2007/04/16/decision-tree-learning-in-ruby/ http://www.igvita.com/2007/05/23/bayes-classification-in-ruby/

Hay también esta biblioteca Ruby que me parece muy útil (también con fines de aprendizaje): http://ai4r.rubyforge.org/machineLearning.html

debe haber un montón de muestras para estos algoritmos en línea en cualquier idioma, así que estoy seguro de que va encontrar fácilmente C# cosas también ...

Editado:

Olvidaste esto en mi post original. Esto definitivamente lo DEBE TENER si está jugando con la extracción de datos ... Descargue Microsoft SQL Server 2008 Data Mining Add-ins for Microsoft Office 2007 (Requiere SQL Server Analysis Services - SSAS - que no es gratuito pero puede descargar una versión de prueba).

Esto le permitirá jugar fácilmente y probar las diferentes técnicas en Excel antes de ir e implementar esto usted mismo.Por otra parte, dado que está en el ecosistema de Microsoft, incluso puede optar por una solución basada en SSAS y contar con los chicos de SQL Server para hacerlo :)

2

La predicción de valores perdidos generalmente se considera como parte de la fase de limpieza de datos que debe realizarse antes de extraer o analizar los datos. Esto es bastante prominente en los datos del mundo real.

Por favor, echar un vistazo a este algoritmo http://arxiv.org/abs/math/0701152

Actualmente servidor de Analysis Services de Microsoft SQL 2008 también viene con algoritmos como estos http://technet.microsoft.com/en-us/library/ms175312.aspx que ayudan en el modelado predictivo de atributos.

aplausos

+0

Agradable. Pero el documento parece hacer la suposición implícita de que no hay sesgo de selección. ¿O me perdí algo? – dmckee

6

Esto es menos de un algorítmica y más de una cuestión filosófica y metodológica. Hay algunas técnicas diferentes disponibles para abordar este tipo de preguntas. Acock (2005) ofrece una buena introducción a algunos de los métodos. Aunque puede parecer que hay muchas matemáticas/estadísticas involucradas (y puede parecer un gran esfuerzo), vale la pena pensar qué pasaría si cometiera un error. el blog de

Andrew Gelman es también un buen recurso, aunque la funcionalidad de búsqueda en su blog deja algo que desear ...

Espero que esto ayude.


Acock (2005)

el blog de

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

Andrew Gelman

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

Cuestiones relacionadas