La forma del problema Un directorio es una superficie: el miembro lo abre y adivina.
Un recomendador es una superficie de empujar: el sistema propone y tiene que justificarse.
La justificación es la parte difícil, y es donde vive la estadística.
Tres restricciones hicieron esto distinto de un recomendador de contenido: El item es una persona con capacidad finita.
Un hilo se le puede recomendar a diez mil personas.
Un experto no.
Una mala recomendación es cara de los dos lados.
Quien pide desperdicia una petición, el experto desperdicia una hora, y los dos aprenden a ignorar la superficie.
La afirmación tiene que ser checable. "Quizá te guste este hilo" no necesita evidencia. "Esta persona está un nivel adelante de ti en diseño de sistemas" sí.
Recuperación: híbrida, fusionada con RRF Tres recuperadores independientes sobre el conjunto de expertos elegibles, fusionados con Reciprocal Rank Fusion: RRF es la primitiva correcta aquí por una razón que vale la pena decir: los recuperadores emiten cantidades incomparables.
Uno regresa un coseno en , uno regresa un conteo entero de hilos resueltos, uno regresa un delta de nivel de escalera.
Normalizarlos a una escala común requiere supuestos sobre sus distribuciones que nadie tiene a este volumen de datos.
RRF descarta las magnitudes y se queda solo con el orden, que es exactamente la información que sobrevive a una muestra chica. es la constante estándar de la formulación original de Cormack et al.
Aplana la cabeza: la diferencia entre el rank 1 y el rank 2 es , así que un recuperador no puede dominar por estar confiado, solo por estar consistentemente temprano a lo largo de las listas.
Scoring: un compuesto ponderado, con los pesos como datos Dos componentes valen la pena desempacar. satura.
Un experto sin historial puntúa 0.5, no 0: La saturación exponencial sobre codifica que la diferencia entre 0 y 5 sesiones completadas es grande y la diferencia entre 40 y 45 es ruido.
Un término lineal habría hecho inalcanzables a los veteranos.
El prior de 0.5 para los no probados es la decisión de cold start que deja crecer el pool de expertos más allá de quien haya ido primero; sin él, el sistema es un loop de rico se hace más rico por construcción. es exposición amortiguada por log. da exactamente 1.0 en y decae lento.
Una penalización lineal habría hecho irrecomendable a un buen experto después de un puñado de ciclos.
La parte que importa: esto es un problema de asignación El instinto es computar un top-N por cada quien pide.
Ese instinto está mal, y el modo de falla no es sutil.
Si cada quien pide escoge de forma independiente a su mejor experto, las mismas tres personas más fuertes juntan todas las peticiones.
Son las que tienen los mejores ratings y el historial más profundo, así que ganan cada ranking, y dejan de contestar en un mes.
El recomendador entonces destruye el recurso que existe para asignar.
Así que los pares se puntúan, y luego se asignan de forma global bajo una restricción de capacidad por experto: Esta es la aproximación greedy a un matching bipartito con restricción de grado.
A esta escala (cientos de pares) la solución óptima vía y la greedy difieren por ruido, y la versión greedy tiene una propiedad que la óptima no: es inspeccionable en un dry run, línea por línea, en orden de score.
Cuando un operador pregunta "¿por qué esta persona obtuvo ese experto?", la respuesta es una sola pasada hacia abajo por una lista ordenada.
A quienes piden que la asignación no puede colocar no se les tira.
Por construcción son aquellos cuyos mejores expertos están llenos, lo que los hace el insumo exacto para el clustering uno-a-muchos: agrúpalos por celda de escalera y propón una sola sesión.
La capa de datos, y la estadística que la hace defendible La segunda capa responde "qué debería aprender después, y cuánto vale".
Compara la mediana de datos ponderada por fuente de los puntos de datos que reportan una habilidad contra los que no.
Esa oración contiene tres maneras de engañar a alguien.
Las tres necesitaron una compuerta.
1.
Ponderación por fuente con decaimiento exponencial por recencia No todos los puntos de datos merecen voto igual.
Cada fuente carga un peso de confianza y una corrección de sesgo, y cada punto decae con la edad: Una vida media de 365 días significa que una publicación de dos años todavía cuenta, a un cuarto del peso de una fresca.
El sobre la tabla de fuentes es deliberado: un punto de datos cuya fila de fuente nunca se registró cuenta en el default neutral de 0.50 en lugar de desvanecerse, porque tirar datos en silencio es peor que ponderarlos de forma conservadora.
El agregado es una mediana ponderada, no una media ponderada.
Las distribuciones de datos están sesgadas a la derecha y la cola es donde viven los errores de scraping; una sola cifra mal parseada mueve una media y no mueve una mediana.
2.
Estratificación, porque el número ingenuo mide antigüedad Este es el confusor que hace inútiles a la mayoría de las afirmaciones de "la habilidad X paga Y% más".
La gente senior sabe más herramientas.
Compara a todos los que reportan Kubernetes contra todos los que no, y una parte grande del delta es nada más antigüedad filtrándose por la comparación.
Cada comparación por lo tanto pasa dentro de un estrato .
Los buckets son burdos a propósito (, , , ): estratos más finos matan de hambre a la muestra y el intervalo explota.
Una habilidad cuyo efecto desaparece una vez estratificada se tira, no se reporta.
3.
Un intervalo por bootstrap, no un estimado puntual Un estimado puntual se lee como una promesa.
El bootstrap por percentil re muestrea las dos cohortes con reemplazo, recomputa las medianas ponderadas, y toma los percentiles 5/95 de la distribución de deltas resultante: El bootstrap es la herramienta correcta porque la distribución muestral de una mediana ponderada de una distribución sesgada no tiene una forma cerrada limpia.
El re muestreo esquiva la derivación por completo.
El RNG sembrado importa más de lo que parece.
Un operador refrescando un dry run de admin no debe ver el número bambolearse; un intervalo de confianza que cambia al recargar es indistinguible de un bug.
Una fila se surge solo si las tres se cumplen: Las filas no significativas de todos modos se computan y se guardan.
La tabla de admin muestra qué se rechazó y por qué, porque un número que el sistema se negó a usar es tan interesante como uno que usó.
La medición que reencuadró el proyecto Todo lo de arriba estaba en verde en CI.
Luego la primera dry run contra producción: 1 experto de
51.
La causa: La intención era "no emparejes a alguien consigo mismo".
La implementación era "excluye a cualquier experto que sea también un candidato a pedir", y casi todos los expertos lo son, porque no tienen ninguna petición abierta propia.
Medido: El único sobreviviente era la única persona que resultó estar a media interacción, y las tres propuestas apuntaban a ella.
El sistema había encontrado el modo de falla de burnout por su cuenta, en la primera corrida, a través de una línea pensada para prevenir un problema completamente distinto.
La guarda de auto emparejamiento ya existía por par, que es donde va.
Dos hallazgos más de la misma corrida: Las cards podían salir sin razón.
Solo 4 miembros tenían una colocación de escalera de competencias, así que el componente más pesado casi siempre era 0 y la señal sobreviviente era un coseno de embedding que nadie puede leer.
Una propuesta tenía una lista de razones vacía.
Una card que no puede decir por qué es peor que ninguna card.
El badge de tendencia disparaba con todo.
La ingesta era reciente, así que casi cada publicación caía en la ventana de 30 días y la línea base de 90 días era una o dos filas: Una razón necesita un denominador que valga la pena dividir.
El arreglo es un conteo mínimo de línea base antes de que se afirme una tendencia siquiera, y una cota sobre la razón.
La lección de frecuencia inversa, aprendida tres veces Esta es la parte con el mayor valor de transfer