Autor Tema: Algoritmo de relevancia

0 Usuarios y 1 Visitante están viendo este tema.

13 Noviembre, 2018, 03:55 pm
Leído 1561 veces

sergiorc

  • $$\Large \color{red}\pi$$
  • Mensajes: 3
  • Karma: +0/-0
  • Sexo: Masculino
Buenos dias, llevo varias semanas comiéndome el coco en busca de un algoritmo (o función matemática) para conseguir un número mediante el cual ordenar resultados. He realizado varias fórmulas pero ninguna me convence, porque no tienen en cuenta todos los factores o números que dispongo.
Ampliando información: El problema es aplicado a los resultados de una página web y deseo que los productos se ordenen por Relevancia, esta relevancia deseo que sea lo más lista posible, para ello tengo datos:
· Nº de veces que se ha mostrado ese producto en la web
· Nº de veces que han pulsado sobre el
· Nº de veces que se ha vendido
· Nº de veces que han dejado una opinion positiva sobre el
Con esos 4 datos, buscaba una función que me devolviese un solo número, y ordenar por ese número dato.
Siendo simplistas hice Relevancia = Nº de veces mostrado/ Nº de veces vendido
Pero eso no tiene en cuenta por ejemplo las opiniones que creo que es un dato relevante para el usuario, en resumen, que no soy capaz de sacar un número en armonia con los 4 factores.
Para rizar el rizo, entiendo que cada factor debería tener una relvancia diferente, por ejemplo lo que de más nota sea el nº de ventas, luego las opiniones, y luego las veces abierto aun que esto ultimo sume menos...

Es un buen reto, almenos para mi, jajajaja. Si alguno se le ocurre una idea brillante, le amaré por siempre!!
Muchas gracias por haberme leido :)
Un saludo
Sergio RC.

13 Noviembre, 2018, 06:10 pm
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 47,114
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola

 Bienvenido al foro.

 Recuerda leer y seguir  las reglas del mismo así como el tutorial del LaTeX para escribir las fórmulas matemáticas correctamente.

Buenos dias, llevo varias semanas comiéndome el coco en busca de un algoritmo (o función matemática) para conseguir un número mediante el cual ordenar resultados. He realizado varias fórmulas pero ninguna me convence, porque no tienen en cuenta todos los factores o números que dispongo.
Ampliando información: El problema es aplicado a los resultados de una página web y deseo que los productos se ordenen por Relevancia, esta relevancia deseo que sea lo más lista posible, para ello tengo datos:
· Nº de veces que se ha mostrado ese producto en la web
· Nº de veces que han pulsado sobre el
· Nº de veces que se ha vendido
· Nº de veces que han dejado una opinion positiva sobre el
Con esos 4 datos, buscaba una función que me devolviese un solo número, y ordenar por ese número dato.
Siendo simplistas hice Relevancia = Nº de veces mostrado/ Nº de veces vendido
Pero eso no tiene en cuenta por ejemplo las opiniones que creo que es un dato relevante para el usuario, en resumen, que no soy capaz de sacar un número en armonia con los 4 factores.
Para rizar el rizo, entiendo que cada factor debería tener una relvancia diferente, por ejemplo lo que de más nota sea el nº de ventas, luego las opiniones, y luego las veces abierto aun que esto ultimo sume menos...

Es un buen reto, almenos para mi, jajajaja. Si alguno se le ocurre una idea brillante, le amaré por siempre!!
Muchas gracias por haberme leido :)

 Vaya por delante que no hay una forma objetiva de definir esa función de relevancia; depende mucho de exactamente como quieras que influya cada dato en la puntuación final, y hay muchas posibilidades para ponderarlo.

No entiendo mucho tu primer intento:

Relevancia = Nº de veces mostrado/ Nº de veces vendido

Es decir que cuanto más vende menos relevancia obtiene y cuando más lo muestra más relevancia. ¿Era esa la intención? ¿Acaso los ibas a ordenar de menor a mayor? Lo digo porque parece lógico que cuanto más se vendan, más relevantes sean.

En general si tienes \( n \) datos puedes construir una función lineal de ponderación:

\( f(x_1,x_2,\ldots,x_n)=a_1x_1+a_2x_2+\ldots+a_nx_n \)

donde \( a_i \) es el "peso" que das a cada dato; cuanto mayor valor le des más influirá en el resultado final. Incluso puedes escoger algún \( a_i \) negativo si quieres que un alto valor de ese dato reste.

Otra opción es hacer algo parecido pero no lineal:

\( f(x_1,x_2,\ldots,x_n)=x_1^{a_1}x_2^{a_2}\ldots x_n^{a_n} \)

O combinar ambas cosas... o ¡qué se yo!...hay infinidad de opciones.

Intenta concretar mejor como quieres que influya cada dato.

Saludos.

15 Noviembre, 2018, 07:33 pm
Respuesta #2

sergiorc

  • $$\Large \color{red}\pi$$
  • Mensajes: 3
  • Karma: +0/-0
  • Sexo: Masculino
En primer lugar muchas gracias por tu tiempo Luis, se lo que valioso que es y lo agradezco de corazón.
Mi solución realmente no la expliqué bien, lo que hago en la actualidad es:
Relevancia = (Veces vendido*100)/Veces mostrado
Simplemente calculo el % de veces que se vende respecto a las veces que se muestra, asi pongo en primer lugar los que tienen mayor % de ventas, pero es muy simplista y tiene varios inconvenientes.
El primero como comenté es que no tengo en cuenta por ejemplo el nº de opiniones positivas del producto, cuyo factor lo veo muy relevante.
Otro problema que me gustaría evitar, es tener una fórmula que haga que un producto viejo con muchas ventas, impida siempre crecer a un producto nuevo, si el nuevo sale siempre el último, es normal q nunca se venda.

Observando tu función, bajo mi inexperiencia, creo que haría que un producto viejo (en el tiempo) con miles de visitas, siempre saque un factor de relavancia mayor que otro nuevo, aun que se esté vendiendo super bien, no?

Ejemplo:
· Producto A: 1000 visitas, 10 opiniones, 10 ventas
· Producto B: 100 visitas, 8 opiniones, 8 ventas
El producto B en mucho menos tiempo tiene mejores registros, por lo que debería salir delante del A.
Creo que el nº de visitas es importantísimo usarlo como rango, es decir, cualquier resultado de relevancia debería ser proporcional al nº de visitas, para impedir que un producto con miles de visitas siempre saque mejor relevancia que uno nuevo (aun que almejor el nuevo en proporcion tiene mejores números).

Yo me quedaría con 3 factores para generar la fórmula
· Nº de veces visto (como patron de control)
· Nº de veces vendido
· Nº de opiniones

No se si con esto he aportado algo más de luz.. Cualquier otra pregunta dispara, que respondo a todo lo que pueda :)

16 Noviembre, 2018, 10:35 am
Respuesta #3

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 47,114
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola

En primer lugar muchas gracias por tu tiempo Luis, se lo que valioso que es y lo agradezco de corazón.
Mi solución realmente no la expliqué bien, lo que hago en la actualidad es:
Relevancia = (Veces vendido*100)/Veces mostrado
Simplemente calculo el % de veces que se vende respecto a las veces que se muestra, asi pongo en primer lugar los que tienen mayor % de ventas, pero es muy simplista y tiene varios inconvenientes.
El primero como comenté es que no tengo en cuenta por ejemplo el nº de opiniones positivas del producto, cuyo factor lo veo muy relevante.
Otro problema que me gustaría evitar, es tener una fórmula que haga que un producto viejo con muchas ventas, impida siempre crecer a un producto nuevo, si el nuevo sale siempre el último, es normal q nunca se venda.

Observando tu función, bajo mi inexperiencia, creo que haría que un producto viejo (en el tiempo) con miles de visitas, siempre saque un factor de relavancia mayor que otro nuevo, aun que se esté vendiendo super bien, no?

Ejemplo:
· Producto A: 1000 visitas, 10 opiniones, 10 ventas
· Producto B: 100 visitas, 8 opiniones, 8 ventas
El producto B en mucho menos tiempo tiene mejores registros, por lo que debería salir delante del A.
Creo que el nº de visitas es importantísimo usarlo como rango, es decir, cualquier resultado de relevancia debería ser proporcional al nº de visitas, para impedir que un producto con miles de visitas siempre saque mejor relevancia que uno nuevo (aun que almejor el nuevo en proporcion tiene mejores números).

Yo me quedaría con 3 factores para generar la fórmula
· Nº de veces visto (como patron de control)
· Nº de veces vendido
· Nº de opiniones

No se si con esto he aportado algo más de luz.. Cualquier otra pregunta dispara, que respondo a todo lo que pueda :)

Como te digo no hay una forma objetiva de hacer esto. Dos propuestas con tus indicaciones. Si llamas:

M= · Nº de veces visto (como patron de control)
V= · Nº de veces vendido
O= · Nº de opiniones

Puedes tomar:

\( \dfrac{aV+bO}{M} \)

ó

\( \dfrac{V^aO^b}{M} \)

Jugando con los parámetros \( a \) y \( b \) para que se ajusten a lo que pretendes, ponderando más o menos vendido frente a opinión.

También se podría definir funciones por tramos... :D  ¡es muy abierto!.

Saludos.

17 Noviembre, 2018, 12:16 pm
Respuesta #4

sergiorc

  • $$\Large \color{red}\pi$$
  • Mensajes: 3
  • Karma: +0/-0
  • Sexo: Masculino
oh!! Bien, bien Luís!! me gusta :)
Voy a rizar el rizo y si solucionamos esto, creo que lo tenemos.. más bien, lo tendrás pues yo he aportado poco, jejeje.
El problema vendrá cuando un producto no se haya vendido nunca, por lo tanto tampoco tendrá opiniones. En esos caso el resultado siempre será 0.

Yo a nivel informático hice:
Si ventas = 0, aplico una formula diferente:
(Nº de veces abierto*100)/Nº de veces mostrado
El resultado lo divido entre 100, para que siempre me de como máximo 0,xxxx
¿Porque quiero que me de 0,xxx? para que nunca sea mayor que el resultado de tu formula, del resultado que se cuando si tenga ventas.

Quizás la solución sea esa, aplicar 2 formulas diferentes, o quizás haya una formula que contemple esa situación... ¿La hay? :)

19 Noviembre, 2018, 03:28 pm
Respuesta #5

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 47,114
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola

oh!! Bien, bien Luís!! me gusta :)
Voy a rizar el rizo y si solucionamos esto, creo que lo tenemos.. más bien, lo tendrás pues yo he aportado poco, jejeje.
El problema vendrá cuando un producto no se haya vendido nunca, por lo tanto tampoco tendrá opiniones. En esos caso el resultado siempre será 0.

Yo a nivel informático hice:
Si ventas = 0, aplico una formula diferente:
(Nº de veces abierto*100)/Nº de veces mostrado
El resultado lo divido entre 100, para que siempre me de como máximo 0,xxxx
¿Porque quiero que me de 0,xxx? para que nunca sea mayor que el resultado de tu formula, del resultado que se cuando si tenga ventas.

Quizás la solución sea esa, aplicar 2 formulas diferentes, o quizás haya una formula que contemple esa situación... ¿La hay? :)

No hay ningún problema en usar dos fórmulas dependiendo de un cierto valor; es lo que te comentaba sobre las funciones por tramos.

Saludos.