Shopcita
Pues resulta que en TWY tenemos una tienda virtual, con eso de las bodas y eso, pues han salido mathes por ahí, que aún cuando no se comparan con Euler, me pareció bonito venir a poner aquí el razonamiento hehehe.
Los valores actuáles son 2% de interés al día en el banco, 2 espermitas por tema nuevo y 0,8 por post nuevo. Lo que nos da lo siguiente:
[math]K(t) = K_0 * (1+2%)^t => K(t) = K_0 * (1,02)^t[/math]
Donde [math]t[/math] es en días, [math]K(t)[/math] el dinero al día [math]t[/math] a partir de hoy y [math]K_0[/math] capital inicial en el banco en espermitas.
Naturalmente a eso le tenemos que añadir los temas y posts nuevos.
Por ende tenemos que sacar primero la cantidad de posts promedio al día por usuario, es decir, sacar la cantidad de posts que hacen los usuarios diariamente y de ese resultado calcular el promedio.
Para sacar la cantidad de posts totales de usuarios es tan sencillo como la suma de todos los posts, dividido entre los días del foro. Primero calculamos los días del foro así:
[math]D = displaystyle sum_{k=1}^n Dia_k[/math]
Query 1:
[cc lang=“sql“]
SELECT
count
(
DISTINCT
FROM_UNIXTIME(posterTime, „%d-%m-%Y“)
) AS Dias
FROM
smf_messages
[/cc]
Lo que nos da 249 días en total de mensajes. Ahora sacamos la suma de los posts totales por usuario:
[math]P = displaystyle sum_{k=1}^N Post_k[/math]
Query 2:
[cc lang=“sql“]
SELECT
count(*) AS Posts
FROM
smf_messages
GROUP BY
ID_MEMBER
[/cc]
La lista me la ahorro por su extensión. Ahora calculamos el promedio diario de mensajes por usuario. Podríamos simplemente poner el número 249 en la Query 2 y ya, pero siendo honestos considero que es más bonito (y útil al final de la historia) poner la Query 1 en la Query 2, quedando así:
[math]overline x_U = displaystyle sum_{k=1}^N frac{1}{D}*P[/math]
Query 3:
[cc lang=“sql“]
SELECT
count(*)/
(
SELECT
count
(
DISTINCT
FROM_UNIXTIME(posterTime, „%d-%m-%Y“)
) AS Dias
FROM
smf_messages
) AS Promedio_Diario
FROM
smf_messages
GROUP BY
ID_MEMBER
ORDER BY
Promedio_Diario DESC
[/cc]
Nuevamente, la lista es demasiado grande para ponerla aquí. Una vez que hemos calculado el promedio diario de posts por usuario, sacamos un promedio de todos los usuarios x día, es decir, lo anterior promediado.
[math]overline x_P = displaystyle sum_{k=1}^N frac{1}{N}*x_U[/math]
Query 4:
[cc lang=“sql“]
SELECT
avg(A.Promedio_Diario)
FROM
(
SELECT
count(*)/
(
SELECT
count
(
DISTINCT
FROM_UNIXTIME(posterTime, „%d-%m-%Y“)
) AS Dias
FROM
smf_messages
) AS Promedio_Diario
FROM
smf_messages
GROUP BY
ID_MEMBER
) AS A
[/cc]
Resultando en: 1.53100000 posts por usuario por día. Ahora, recordado nuestras clases sobre estadística, sabemos que este valor no es de mucha ayuda, ya que la persona que tiene 2000 posts va a generar mas dinero que la que tiene 20 posts (diariamente), ya que 20 en 249 días es muy poco comparado con los 2000 en 249 días, por lo que sacamos la desviación estándar:
[math]sigma = sqrt{ frac{1}{N-1} displaystyle sum_{k=1}^N (overline x_U – overline x_P )^2 }[/math]
Query 5:
[cc lang=“sql“]
SELECT sqrt(sum(A.Promedio_Diario)/(SELECT count(DISTINCT FROM_UNIXTIME(posterTime, „%d-%m-%Y“)) AS Dias FROM smf_messages)) AS Variacion FROM (SELECT count(*)/pow((SELECT count(DISTINCT FROM_UNIXTIME(posterTime, „%d-%m-%Y“)) AS Dias FROM smf_messages)-(SELECT avg(A.Promedio_Diario) FROM (SELECT count(*)/(SELECT count(DISTINCT FROM_UNIXTIME(posterTime, „%d-%m-%Y“)) AS Dias FROM smf_messages) AS Promedio_Diario FROM smf_messages GROUP BY ID_MEMBER) AS A),2) AS Promedio_Diario FROM smf_messages GROUP BY ID_MEMBER) AS A
[/cc]
Lo que nos da una desviación estándar de: 0.042726705631084. La desviación estándar es simplemente el „promedio“ o variación esperada con respecto de la media aritmética.
En otras palabras quiere decir que al promedio de mensajes [math]overline x_P[/math], existe una variación de mas/menos 0.042726705631084. El promedio en este caso es 1.531. Lo que quiere decir que redondeando, se espera que diariamente los usuarios pongan un promedio de 1.53 posts con una diferencia de mas/menos 0.043, en pocas palabras, podriamos decir que diariamente hay 1.53*80=122.4 mensajes, lo que equivale a que el banco pierde 97.92 espermitas diariamente.
Si sacamos un promedio con query del último mes obtenemos:
[cc lang=“sql“]SELECT avg(A.Posts) FROM (SELECT FROM_UNIXTIME(posterTime, „%d“) AS Dia,count(*) AS Posts FROM smf_messages WHERE FROM_UNIXTIME(posterTime, „%m“)=06 GROUP BY FROM_UNIXTIME(posterTime, „%d“)) AS A[/cc]
Un resultado de 326.7273, casi tres veces nuestro promedio de arriba. Esto se debe a que no todos los usuarios han „cotizado“ los 249 días. Existen usuarios que se registraron el día de anteayer (creo) que han cotizado únicamente 2 días, lo que suponiendo que tuvieran dos mensajes nos lleva a que [math]frac{2}{2} >> frac{2}{249}[/math]. Podríamos mejorar nuestra Query para incluir únicamente los días respectivos a cada usuario, lo cual nos complicaría enormemente y ya es tarde, por lo que simplemente definimos que el promedio de posts diarios por usuario es el promedio de los últimos 11 días:
[cc lang=“sql“]SELECT avg(A.Posts)/80 AS Prom_Posts FROM (SELECT FROM_UNIXTIME(posterTime, „%d“) AS Dia,count(*) AS Posts FROM smf_messages WHERE FROM_UNIXTIME(posterTime, „%m“)=06 GROUP BY FROM_UNIXTIME(posterTime, „%d“)) AS A[/cc]
Para la cantidad de Topics simplemente utilicé la cantidad de usuarios (80) y el número de días (249) e hice una simple Query
[cc lang=“sql“]SELECT (count(*)/80)/249 AS Topics FROM smf_topics[/cc]
Lo que nos da de resultado 0.04096386, aproximádamente 0.041. Al juntar todos nuestros datos obtenemos que:
[math]K(t) = K_0 * (1,02)^t + 0,041*t + 1,53*t = K_0 * (1,02)^t + 1,571*t[/math]
Así pues, si yo hoy, Der Ketzer, tengo 106 espermitas en el banco y quiero saber cuánto tendré para fin de mes, calcularé:
[math]K(20) = 106*(1,02)^{20} + 0,041*20 + 1,53*20 = 157,51 + 0,82 + 30,6 = 188,93[/math]
O sea que si dejo en el banco mis 106 espermitas, puedo estar seguro que tendré en 20 días 157,51 espermitas, y puedo esperar que tenga aproximádamente 188,93 (dentro de 20 días vengo a publicar cuanto tengo). La curva se ve algo así:
Lo que nos lleva a que un usuario puede ganar al día:
[math]K(1) = K_0 * (1,02)^1 + 1,571*1 = K_0*0,02 + 1,571[/math]
Si consideramos un promedio bancario de:
[cc lang=“sql“]SELECT avg(moneyBank) FROM smf_members[/cc]
Obtenemos 124.962500. Que sustituyéndolo en [math]K_0[/math] obtenemos lo siguiente:
[math]K_f = 124,96*0,02 + 1,571 = 4,07[/math]
En otras palabras, usuarios, pónganse a trabajar, ya que en promedio ganan únicamente 4,07 espermitas diariamente.
Después implemento algo similar en los perfiles para que sepan aproximádamente cuánto ganan en promedio diariamente según sus propias estadísticas y no un promedio general.
Como un ejemplo, mi promedio diario en los 249 días del foro es de:
[cc lang=“sql“]SELECT count(*)/249 FROM smf_messages WHERE ID_MEMBER=2[/cc]
2,3775 posts diarios (de 592), si he iniciado 63 temas es un promedio de:
[cc lang=“sql“]SELECT count(*)/249 FROM smf_topics WHERE ID_MEMBER_STARTED=2[/cc]
0,2530 diarios. Usando los mismos valores, mi funcion sería:
[math]K(t) = K_0*(1,02)^t + 0,2530*t + 2,3775*t = K_0*(1,02)^t + 2,6305*t[/math]
Considerando los 106 espermitas en el banco y un plazo de 20 días obtenemos un total de:
[math]K(20) = 106*(1,02)^{20} + 2,6305*20 = 157,51 + 52,61 = 210,12[/math]
Si comparamos los 188,93 con los 210,12, notamos una diferencia de 21,19, es decir 1,0595 espermitas diarios.
Esta es mi gráfica. La curva de la izquierda (más pegada al eje-y, la roja) es mi curva mientras que la otra es la curva promedio (la azul).
Saludos
P.D. Si notan errores en mis Querys o en las mathes, favor de dejar un mensaje. Consideren que no es el análisis mega woao de cohetes espaciales. Así que en verdad no le eché much galleta. ¡Gracias!