2009-10-28 10 views
17

¿Cuál es la lógica detrás de la fórmula utilizada en el programa hive_trend_mapper.py de this Hadoop tutorial al calcular las tendencias de Wikipedia?Algoritmos de comprensión para medir tendencias

realidad, hay dos componentes: una tendencia mensual y una tendencia diaria. Me voy a centrar en la tendencia diaria, pero se aplican preguntas similares a la mensual.

En la tendencia diaria, pageviews es una matriz de número de páginas vistas por día para este tema, uno de los elementos por día, y total_pageviews es la suma de esta matriz:

# pageviews for most recent day 
y2 = pageviews[-1] 
# pageviews for previous day 
y1 = pageviews[-2] 
# Simple baseline trend algorithm 
slope = y2 - y1 
trend = slope * log(1.0 +int(total_pageviews)) 
error = 1.0/sqrt(int(total_pageviews)) 
return trend, error 

Yo sé lo que está haciendo superficialmente: sólo se ve en el cambio en el último día (slope), y las escalas de este hasta el registro de 1+total_pageviews (log(1)==0, por lo que este factor de escala es no negativo). Se puede observar como el tratamiento de páginas vistas totales del mes como un peso, pero templado a medida que crece - de esta manera, las páginas vistas totales dejar de hacer una diferencia para las cosas que son "suficientemente popular", pero al mismo tiempo grandes cambios en insignificante don' se pesa tanto.

Pero ¿por qué hace esto? ¿Por qué queremos descontar cosas que inicialmente eran impopulares? ¿No deberían importarse los deltas grandes más para los artículos que tienen una baja popularidad constante, y menos para los artículos que ya son populares (para los cuales los grandes deltas podrían caer dentro de una fracción de una desviación estándar)? Como un hombre de paja, ¿por qué no simplemente tomar y2-y1 y terminar con eso?

¿Y para qué sirve el error? El tutorial realmente no lo usa significativamente nuevamente. Por otra parte, tampoco nos dice cómo se usa trend: esto es lo que se traza en el producto final, ¿correcto?

¿Dónde puedo leer para obtener una (preferentemente de introducción) de fondo en la teoría aquí? ¿Hay un nombre para esta locura? ¿Es esta una fórmula de libro de texto en alguna parte?

Gracias de antemano por las respuestas (o discusión!).

Respuesta

10

Como dice el comentario en línea, este es un simple "algoritmo de tendencia de línea base", que básicamente significa que antes de comparar las tendencias de dos páginas diferentes, debe establecer una línea base. En muchos casos, se usa el valor medio, es sencillo si traza las vistas de página frente al eje de tiempo. Este método es ampliamente utilizado para monitorear calidad del agua, contaminantes del aire, etc. para detectar cualquier cambio significativo en la línea de base.

En el caso de OP, la pendiente de las páginas vistas se pondera con el registro de totalpageviews. Esto sorta usa el totalpageviews como una corrección de línea base para la pendiente. Como dijo Simon, esto pone un saldo entre dos páginas con totalpageviews muy diferentes. Por ejemplo, A tiene una pendiente de 500 sobre 1000,000 páginas vistas totales, B es 1000 sobre 1,000. Un registro básicamente significa que 1000,000 SOLO es dos veces más importante que 1,000 (en lugar de 1000 veces). Si solo considera la pendiente, A es menos popular que B. Pero con un peso, ahora la medida de popularidad de A es lo mismo que B. Creo que es bastante intuitivo: aunque las páginas vistas de A solo son 500 páginas vistas, pero eso es porque está saturando, todavía tienes que darle suficiente crédito.

cuanto al error, creo que viene de la (relativa) standard error, que tiene un factor de 1/sqrt (n), donde n es el número de puntos de datos. En el código, el error es igual a (1/sqrt (n)) * (1/sqrt (media)). Se traduce aproximadamente en: cuantos más puntos de datos, más precisa es la tendencia. No veo es una fórmula matemática exacta, solo un algoritmo de análisis de tendencia bruta, de todos modos el valor relativo es más importante en este contexto.

En resumen, creo que es solo una fórmula empírica. Se pueden encontrar temas más avanzados en algunos libros de texto de bioestadística (muy similares al monitoreo de una gripe o similar).

+0

Bien, entendí su mecánica. Simplemente no estoy de acuerdo con que sea intuitivo decir que el crecimiento de B se debe pesar menos que las A, aunque B no es tan popular, también hay algo que decir acerca de su aumento relativo y repentino de los clics; por el contrario, el crecimiento de A cae dentro de su desviación estándar, y debe verse como menos significativo.Supongo que esta fórmula en particular es más una medida de la popularidad de la línea de base. En cuanto a libros, realmente esperaba recomendaciones específicas. – Yang

1

El código implementa estadísticas (en este caso, la "tendencia de referencia"), debe informarse sobre eso y todo se vuelve más claro. Wikilibros tiene un buen instroduction.

El algoritmo tiene en cuenta que las páginas nuevas son por definición más impopulares que las existentes (porque, por ejemplo, están vinculadas desde relativamente pocos lugares) y sugiere que esas nuevas páginas crecerán en popularidad con el tiempo.

error es el margen de error que el sistema espera para sus pronósticos. Cuanto mayor sea error, más improbable es que la tendencia continúe según lo esperado.

+0

Ni yo ni Google pudimos encontrar el lugar en el que se introdujo la tendencia de referencia de Wikilibro. ¿Tienes un puntero? – Yang

+0

Ese libro maneja estadísticas básicas que uno debe comprender antes de tratar de trabajar con los conceptos más esotéricos. – ty812

1

La razón para moderar la medida por el volumen de clics no es penalizar páginas populares sino asegurarse de que puede comparar cambios grandes y pequeños con una sola medida. Si solo usa y2 - y1, solo verá los cambios de clic en páginas de gran volumen. Lo que esto está tratando de expresar es un cambio "significativo". 1000 clics cambian si atrae 100 clics es realmente significativo. Cambio de 1000 clics si atraes 100,000 es menos. Lo que intenta hacer esta fórmula es hacer que ambos sean visibles.

Pruébalo en unas pocas escalas diferentes en Excel, obtendrá una buena vista de la forma en que opera.

Espero que ayude.

+0

No sigo. El factor de escala de registro está inflando claramente el puntaje del artículo popular. En Python: >>> [(d, d * math.log (1. + t)) para (d, t) en [(1000,100), (1000,100000)]] [(1000, 4615.1205168412598), (1000, 11512.935464920229)] – Yang

1

otra forma de verlo es la siguiente:

suponer su página y mi página se realizan en el mismo día, y ur página obtiene visitas en total alrededor de diez millones de dólares, y el mío alrededor de 1 millón, hasta un cierto punto. entonces supongamos que la pendiente en algún punto es un millón para mí, y 0.5 millones para ti. si solo usa pendiente, entonces gano, pero su página ya tenía más vistas por día en ese punto, urs tenía 5 millones, y la mía 1 millón, de modo que un millón en la mina todavía hace 2 millones, y urs es 5.5 millones por ese día. Entonces, este concepto de escalado es intentar ajustar los resultados para mostrar que tu página también es buena como iniciador de tendencias, y su pendiente es menor, pero ya era más popular, pero la escala es solo un factor de registro, por lo que no parece demasiado problemático para mí.

Cuestiones relacionadas