2010-03-01 7 views
7

Esta no es una pregunta relacionada directamente con la programación, sino que se trata de seleccionar el algoritmo de minería de datos correcto.¿Qué algoritmo de minería de datos sugeriría para este escenario en particular?

Quiero deducir la edad de las personas de sus nombres, de la región en que viven, y si tienen un producto de Internet o no. La idea detrás de esto es que:

  • hay nombres que son pasados ​​de moda o popular en una década en particular (celebridades, políticos, etc.) (esto no puede sostener en los EE.UU., pero en el país de interés que es cierto),
  • los jóvenes tienden a vivir en regiones muy pobladas, mientras que las personas mayores prefieren el campo, y
  • Internet es utilizado más por los jóvenes que por las personas mayores.

No estoy seguro de si esas suposiciones se cumplen, pero quiero probar eso. Entonces lo que tengo es 100K observaciones de nuestra base de datos de clientes con

  • aprox. 500 nombres diferentes (variables de entrada nominal con demasiadas clases)
  • 20 regiones diferentes (variables de entrada nominal)
  • Internet Sí/No (variable de entrada binaria)
  • 91 birthyears distintas (variable objetivo numérica con un rango de: 1910- 1992)

Como tengo tantas entradas nominales, no creo que la regresión sea un buen candidato. Como el objetivo es numérico, tampoco creo que el árbol de decisión sea una buena opción. ¿Alguien puede sugerirme un método que sea aplicable para tal escenario?

+2

¿100k observaciones y solo 500 nombres diferentes? –

+0

su tercera suposición es cuestionable; compruebe mejor la investigación –

+0

@Samuel: sí, 500 * primeros * nombres. La gente no es muy creativa acerca de los nombres de bebés aquí. – ercan

Respuesta

3

nueva respuesta

me gustaría probar el uso de regresión, pero de la manera que especifique. Yo trataría de binarizar cada variable (si este es el término correcto). La variable de Internet es binaria, pero la convertiría en dos valores binarios separados. Ilustraré con un ejemplo porque siento que será más esclarecedor. Para mi ejemplo, solo usaré tres nombres (Gertrude, Jennifer y Mary) y la variable de internet.

Tengo 4 mujeres. He aquí sus datos:

Gertrude, Internet, 57 
Jennifer, Internet, 23 
Gertrude, No Internet, 60 
Mary, No Internet, 35 

que generaría una matriz, A, así (cada fila representa una mujer respectiva en mi lista):

[[1,0,0,1,0], 
[0,1,0,1,0], 
[1,0,0,0,1], 
[0,0,1,0,1]] 

Las primeras tres columnas representan los nombres y la los últimos dos Internet/No Internet. Por lo tanto, las columnas representan

[Gertrude, Jennifer, Mary, Internet, No Internet] 

Usted puede seguir haciendo esto con más nombres (500 columnas para los nombres), y para las regiones (20 columnas para aquellos). A continuación, sólo se le resolviendo el estándar de álgebra lineal problema A * x = b, donde b para el ejemplo anterior es

b=[[57], 
    [23], 
    [60], 
    [35]] 

Usted puede estar preocupado de que A será ahora una matriz enorme, pero es un enorme, muy matriz escasa y por lo tanto se puede almacenar de manera muy eficiente en una forma de matriz dispersa. Cada fila tiene 3 1 y el resto es 0.A continuación, puede resolver esto con un solucionador de matriz escasa. Querrá hacer algún tipo de prueba de correlación en las edades de predicción resultantes para ver qué tan efectiva es.

+0

Había pensado en eso, pero sí, estaba preocupado por la enormidad de la matriz. Pero tienes razón, usar un formato de matriz dispersa definitivamente ayudaría. Voy a darle una oportunidad. – ercan

+0

Y teniendo en cuenta las 20 regiones también, tendría 521 variables de entrada y una variable de objetivo numérico. Luego compararía el error promedio con el conjunto de prueba con el escenario de simplemente usar la edad promedio por nombre. Veamos si el modelo de regresión aporta algún beneficio significativo en comparación con el modelo simple. Si no, usaría la máquina de afeitar de occam;) – ercan

+0

Si tomas la variable de internet como lo hice, obtienes 522 (columnas separadas para internet y no para internet), pero podría no ser de ayuda. –

3

Creo que podría diseñar variables discretas que reflejen la división que está tratando de determinar. No parece que necesites una regresión sobre su edad exacta.

Una posibilidad es agrupar las edades y luego tratar los clústeres como variables discretas. Si esto no fuera apropiado, otra posibilidad es dividir las edades en contenedores de igual distribución.

Una técnica que podría funcionar muy bien para sus propósitos es, en lugar de agrupar o dividir las edades directamente, agrupar o particionar la edad promedio por nombre. Es decir, genere una lista de todas las edades promedio, y trabaje con esto en su lugar. (Sin embargo, puede haber algunos problemas estadísticos en el clasificador si las categorías discretas son demasiado finas).

Sin embargo, el mejor caso es si tiene una noción clara de qué rango de edad considera apropiado para "joven" y "viejo". Entonces, utilícelos directamente.

+0

en realidad, las edades son más o menos gaussianas distribuidas. No creo que sea posible un agrupamiento razonable. – ercan

+0

Justo lo suficiente, voy a editar mi respuesta para reflejar esto. –

+0

En realidad, al principio comencé con la idea de "simplemente tomar la edad promedio por nombre directamente". Sin embargo, ¿no sería demasiado simple? Me gustaría tener un modelo más realista, que tenga en cuenta más parámetros ... ¿Puedo fusionar de alguna manera este enfoque simple con uno más sofisticado? – ercan

2

Puedes echar un vistazo al babynamewizard. Muestra los cambios en la frecuencia de los nombres a lo largo del tiempo y debería ayudarlo a convertir sus nombres en una entrada numérica. Además, debe poder utilizar la densidad de población de los datos de census.gov para obtener un valor numérico asociado con sus regiones. Sugeriría una bandera adicional con respecto a la disponibilidad del acceso DSL: muchas áreas rurales no tienen cobertura DSL. Sin cobertura = menos demanda de servicios de internet.

Mi primera inclinación sería dividir su respuesta en dos grupos, los que muy probablemente usaron computadoras en la escuela o en el trabajo, y los que son mucho menos probables. La exposición al uso de la computadora a una edad temprana en la carrera o en la escuela probablemente tenga algún efecto sobre la probabilidad de que usen una computadora más adelante en sus vidas. Entonces podría considerar regresiones en los grupos por separado. Esto debería eliminar parte de la correlación natural de tus entradas.

+0

La página web que sugirió es realmente agradable, gracias. Sin embargo, el país de interés es Alemania, no los EE. UU. – ercan

1

Usaría un algoritmo de clasificación que acepta atributos nominales y clases numéricas, como M5 (para árboles o reglas). Quizás podría combinarlo con el meta clasificador de embolsado para reducir la varianza. El algoritmo original M5 fue inventado por R. Quinlan y Yong Wang hizo mejoras.

El algoritmo se implementa en R (biblioteca RWeka)

También se puede encontrar en el software de código abierto de aprendizaje automático Weka

Para obtener más información, véase:

Ross J. Quinlan: Learning with Continuous Classes . En: 5ta Conferencia Conjunta de Australia sobre Inteligencia Artificial, Singapur, 343-348, 1992.

Y. Wang, I. H. Witten: Induction of model trees for predicting continuous classes. En: Pósters de la 9ª Conferencia Europea sobre Aprendizaje Automático, 1997.

1

Creo que los árboles son excelentes algoritmos para tratar datos nominales porque pueden ayudarlo a construir un modelo que pueda fácilmente interpretar e identificar la influencia de cada una de estas variables nominales y sus diferentes valores. También puede usar regresión con variables ficticias para representar los atributos nominales, esta también es una buena solución. Pero también puede usar otros algoritmos como SVM (smo), con la transformación previa de las variables nominales en variables ficticias binarias, lo mismo que en la regresión.

Cuestiones relacionadas