algorithm - Cómo proporcionar los resultados más relevantes con la clasificación ponderada de múltiples factores
sorting bayesian (2)
Necesito proporcionar una clasificación ponderada en 2+ factores, ordenados por "relevancia". Sin embargo, los factores no están completamente aislados, ya que quiero que uno o más de los factores afecten la "urgencia" (peso) de los demás.
Ejemplo: el contenido contribuido ( artículos ) puede ser votado arriba / abajo, y así tener una calificación; tienen una fecha de publicación y también están etiquetados con categorías. Los usuarios escriben los artículos y pueden votar, y pueden o no tener algún tipo de clasificación (expertos, etc.). Probablemente similar a StackOverflow, ¿verdad?
Quiero proporcionar a cada usuario una lista de artículos agrupados por etiqueta, pero ordenados por "relevancia", donde la relevancia se calcula en función de la calificación y la edad del artículo, y posiblemente se ve afectada por la clasificación del autor. Es posible que un artículo altamente calificado que se escribió hace varios años no sea necesariamente tan relevante como un artículo de nivel medio escrito ayer. Y tal vez si un artículo fuera escrito por un experto, se consideraría más relevante que el escrito por "Joe Schmoe".
Otro buen ejemplo sería asignar a los hoteles un "meta score" compuesto por precio, calificación y atracciones .
Mi pregunta es, ¿cuál es el mejor algoritmo para la clasificación de múltiples factores? Esto puede ser un duplicado de esa pregunta , pero estoy interesado en un algoritmo genérico para cualquier número de factores (una expectativa más razonable es de 2 a 4 factores), preferiblemente una función "completamente automática" que no tengo que hacer. ajustar o requerir la entrada del usuario, y no puedo analizar el álgebra lineal y el eigenvector del vector.
Posibilidades que he encontrado hasta ahora:
Nota: S
es la "puntuación de clasificación"
- "Linealmente ponderado" : use una función como:
S = (w 1 * F 1 ) + (w 2 * F 2 ) + (w 3 * F 3 )
, dondew x
son pesos asignados arbitrariamente, yF x
son los valores de los factores. También querría normalizarF
(es decir,F x_n = F x / F max
). Creo que así es como funciona la búsqueda de Lucene . - "Base-N ponderada" : más como agrupación que ponderación, es solo una ponderación lineal donde las ponderaciones aumentan en múltiplos de base-10 (un principio similar a la especificidad del selector de CSS ), de modo que los factores más importantes son significativamente más altos:
S = 1000 * F 1 + 100 * F 2 + 10 * F 3 ...
- Valor real estimado (ETV) : esto es aparentemente lo que Google Analytics introdujo en sus informes , donde el valor de un factor influye ( ponderación ) en otro factor: la consecuencia es la clasificación en valores más "estadísticamente significativos". El enlace lo explica bastante bien, así que aquí está la ecuación:
S = (F 2 / F 2_max * F 1 ) + ((1 - (F 2 / F 2_max )) * F 1_avg )
, dondeF 1
es el "más factor importante ("tasa de rebote" en el artículo), yF 2
es el factor "modificador de importancia" ("visitas" en el artículo). - Estimación Bayesiana : se ve muy similar a ETV, así es como IMDb calcula su calificación. Vea esta publicación de StackOverflow para una explicación ; ecuación:
S = (F 2 / (F 2 +F 2_lim )) * F 1 + (F 2_lim / (F 2 +F 2_lim )) × F 1_avg
, dondeF x
es el mismo que # 3, yF 2_lim
es el límite de umbral mínimo para el factor de "importancia" (es decir, cualquier valor menor que X no debe considerarse).
Las opciones # 3 o # 4 parecen realmente prometedoras, ya que realmente no tiene que elegir un esquema de ponderación arbitrario como lo hace en # 1 y # 2, pero el problema es ¿cómo hace esto por más de dos factores?
También me encontré con la implementación de SQL para un algoritmo de ponderación de dos factores , que es básicamente lo que necesitaré escribir con el tiempo.
Como se mencionó en los comentarios, sugeriría lo que se denomina "solución de compromiso" a cualquier persona con un problema similar que esté más preocupada por no tener que establecer ponderaciones que por hacer que un criterio tenga una ponderación más fuerte que los otros.
Básicamente, considera cada uno de sus criterios como una coordenada (después de la normalización, por supuesto). De acuerdo con su criterio, usted elige el punto óptimo absoluto, por ejemplo, en este caso, el autor de más alto rango, el artículo más nuevo, etc. Una vez que elija la solución óptima, cada una de las "soluciones" se calificará según la distancia a la que se encuentre. Una fórmula de muestra sería la inversa de la distancia euclidiana para la puntuación de cada artículo: S = 1 / (sqrt ((rank - rank_ideal) ^ 2 + (age - age_ideal) ^ 2 + ... + (xn - xn_ideal) ^ 2 )).
Esto trata todos los criterios como iguales, así que tenlo en cuenta.
Considere el encadenamiento de los pesos. Por ejemplo, tienes 3 factores: X , Y y Z. Puede calcular ETVyz como W = (Z/Zmax * Y) + (1 - Z/Zmax) * Yavg
para cada registro y luego calcular ETVxw como S = (W/Wmax * X) + (1 - W/Wmax) * Xavg
. Puedes encadenar más factores de manera similar.