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:

K(t) = K_0 * (1+2\%)^t => K(t) = K_0 * (1,02)^t

Donde t es en días, K(t) el dinero al día t a partir de hoy y K_0 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í:

D = \displaystyle \sum_{k=1}^n Dia_k

Query 1:

1
2
3
4
5
6
7
8
SELECT
COUNT
(
DISTINCT
FROM_UNIXTIME(posterTime, "%d-%m-%Y")
) AS Dias
FROM
smf_messages

Lo que nos da 249 días en total de mensajes. Ahora sacamos la suma de los posts totales por usuario:

P = \displaystyle \sum_{k=1}^N Post_k

Query 2:

1
2
3
4
5
6
SELECT
COUNT(*) AS Posts
FROM
smf_messages
GROUP BY
ID_MEMBER

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í:

\overline x_U = \displaystyle \sum_{k=1}^N \frac{1}{D}*P

Query 3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

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.

\overline x_P = \displaystyle \sum_{k=1}^N \frac{1}{N}*x_U

Query 4:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

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:

\sigma = \sqrt{ \frac{1}{N-1} \displaystyle \sum_{k=1}^N (\overline x_U - \overline x_P )^2 }

Query 5:

1
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

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 \overline x_P, 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:

1
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

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 \frac{2}{2} >> \frac{2}{249}. 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:

1
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

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

1
SELECT (COUNT(*)/80)/249 AS Topics FROM smf_topics

Lo que nos da de resultado 0.04096386, aproximádamente 0.041. Al juntar todos nuestros datos obtenemos que:

K(t) = K_0 * (1,02)^t + 0,041*t + 1,53*t = K_0 * (1,02)^t + 1,571*t

Así pues, si yo hoy, Der Ketzer, tengo 106 espermitas en el banco y quiero saber cuánto tendré para fin de mes, calcularé:

K(20) = 106*(1,02)^{20} + 0,041*20 + 1,53*20 = 157,51 + 0,82 + 30,6 = 188,93

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í:

dinero_twy

Lo que nos lleva a que un usuario puede ganar al día:

K(1) = K_0 * (1,02)^1 + 1,571*1 = K_0*0,02 + 1,571

Si consideramos un promedio bancario de:

1
SELECT avg(moneyBank) FROM smf_members

Obtenemos 124.962500. Que sustituyéndolo en K_0 obtenemos lo siguiente:

K_f = 124,96*0,02 + 1,571 = 4,07

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:

1
SELECT COUNT(*)/249 FROM smf_messages WHERE ID_MEMBER=2

2,3775 posts diarios (de 592), si he iniciado 63 temas es un promedio de:

1
SELECT COUNT(*)/249 FROM smf_topics WHERE ID_MEMBER_STARTED=2

0,2530 diarios. Usando los mismos valores, mi funcion sería:

K(t) = K_0*(1,02)^t + 0,2530*t + 2,3775*t = K_0*(1,02)^t + 2,6305*t

Considerando los 106 espermitas en el banco y un plazo de 20 días obtenemos un total de:

K(20) = 106*(1,02)^{20} + 2,6305*20 = 157,51 + 52,61 = 210,12

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).

dinero_twy2

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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*