Consultoría

Sobre la normalización de las direcciones postales

Lo de las direcciones postales es un caos. Trabajar con ellas, una tortura. Y cualquier proyecto de ciencia de datos que las emplee se convierte en la n-ésima reinvención de la rueda: normalización y tal.

Cuando todo debería ser más sencillo. Cada portal en España tiene asociado un número de policía, un identificador numérico único. Independientemente de que quienes lo habiten se refieran a él de formas variopintas, vernaculares y, en definitiva, desnormalizadas y desestandarizadas hasta pedir basta.

P-valores y decisiones

Los números de esta entrada son reales aunque disfrazados: proceden de un proyecto real. Para medir la efectividad de una serie de modelos que hemos creado en Circiter, hemos pedido al cliente lo de siempre: que parta la lista de sujetos en dos al azar para después poder medir los éxitos y fracasos usando dos procedimientos distintos.

Pero como tenemos dudas acerca del proceso de partición —que no controlamos nosotros— hemos medido el número de éxitos y fracasos en cada uno de los grupos en una prueba previa. Esperábamos que las proporciones fuesen similares en ambos grupos y hemos obtenido esto:

¿Qué variable distingue mejor dos subgrupos?

Es una pregunta que surge reiteradamente. Por ejemplo, cuando se compara un clúster con el resto de la población y uno busca las variables que mejor lo caracterizan. Y crear gráficos como

(extraído de aquí) donde las variables están ordenadas de acuerdo con su poder discriminador.

Mi técnica favorita para crear tales indicadores es la EMD (earth mover’s distance) y/o sus generalizaciones, muy bien descritas en Optimal Transport and Wasserstein Distance y disponibles en R y Python.

Un modelo que alimenta una simulación

Tenemos en Circiter un proyecto sobre el que no puedo dar muchos detalles, pero que vamos a plantear (en versión muy resumida) como un modelo que alimenta una simulación.

El modelo no va a ser un modelo sino un modelo por sujeto (rebaños, los llamamos aquí). Los modelos serán, casi seguro, modelos mixtos (lmer/glmer).

Pero claro, si usas un modelo, por muy mixto que sea, con intención de simular, predict se queda muy corto (¡siempre da la el mismo resultado!).

Simulación de procesos de Poisson no homogéneos y autoexcitados

Fueron mis modelos favoritos un tiempo, cuando modelaba visitas y revisitas de usuarios a cierto malhadado portal.

Si las visitas fuesen aleatorias (en cierto sentido), tendrían un aspecto no muy distinto del que se obtiene haciendo

library(IHSEP)

suppressWarnings(set.seed(exp(pi * complex(imaginary = 1))))

tms <- simPois(int = function(x) .1, cens = 1000)
hist(tms, breaks = 100, main = "Proceso homogéneo de Poisson",
      xlab = "", ylab = "frecuencia")

Es decir,

o bien una distribución uniforme en el tiempo. Pero bien puede ocurrir que una visita incremente la probabilidad de otra inmediatamente después, por lo que las visitas tenderían a arracimarse en determinados momentos. Con el paquete [IHSEP](https://cran.r-project.org/package=IHSEP) de R pueden simularse (y ajustarse) este tipo de modelos. Por ejemplo,

Ceteris paribus vs Heráclito

Nuestro producto aumenta el X de las empresas en un Y%.

¿Cuántas veces hemos oído eso?

Esa afirmación presupone una fe ciega en la posibilidad de aplicar el principio del ceteris paribus en situaciones reales. Pues lo siento: el ceteris paribus es un concepto irreal, una aspiración a la que la realidad de las cosas se opone tozudamente.

¿Y Heráclito? Heráclito nos observa desde donde esté y se fuma un puro.

Las decisiones son lo primario; la estadística es subsidiaria

En Circiter estamos negociando con unos clientes potenciales acerca de, tal como nos dijeron inicialmente, construir un modelo. Todo bien.

En la última reunión surgió la pregunta (¡qué vergüenza por mi parte no haberla planteado mucho antes!): ¿cómo habría que usarlo para dar soporte al negocio? La discusión subsiguiente dejó claro que habría que cambiar sustancialmente la aproximación al modelo. Por ejemplo:

  • Era tanto o más importante la discriminación intra-sujeto que la entre-sujeto (es decir, importaba más lo que el modelo pudiera decir de los ítems de cada sujeto que las diferencias que pudiera mostrar entre sujetos).
  • La capacidad predictiva del modelo, aun siendo importante, se volvía una medida subsidiaria.
  • Cobraba una particular relevancia el problema del cold-start.

En definitiva, la necesidad de uso cambiaba la estrategia de modelación de arriba a abajo.

Pesos de los componentes del QualityScore en Google Ads

El llamado QualityScore tiene su relevancia en Google Ads. Es un indicador con valores entre 1 y 10 asignado por Google que se basa en tres variables que están descritas por ahí:

  • PostClickQualityScore
  • SearchPredictedCtr
  • CreativeQualityScore

Se trata de variables categóricas con tres niveles: en / por encima de / por debajo de la media.

Haciendo

modelo <- lm(QualityScore ~ PostClickQualityScore +
    SearchPredictedCtr + CreativeQualityScore,
    data = tmp)

summary(modelo)

se obtiene

Call:
lm(formula = QualityScore ~ PostClickQualityScore + SearchPredictedCtr +
    CreativeQualityScore, data = tmp)

Residuals:
        Min       1Q   Median       3Q      Max
-0.25003 -0.07395  0.00775  0.06344  0.86470

Coefficients:
                                    Estimate Std. Error t value Pr(>|t|)
(Intercept)                        1.079603   0.008688   124.3   <2e-16 ***
PostClickQualityScoreAVERAGE       2.114012   0.009037   233.9   <2e-16 ***
PostClickQualityScoreABOVE_AVERAGE 3.856228   0.008448   456.5   <2e-16 ***
SearchPredictedCtrAVERAGE          1.137396   0.003284   346.4   <2e-16 ***
SearchPredictedCtrABOVE_AVERAGE    3.055694   0.004707   649.2   <2e-16 ***
CreativeQualityScoreAVERAGE        0.999580   0.004274   233.9   <2e-16 ***
CreativeQualityScoreABOVE_AVERAGE  2.000725   0.003862   518.1   <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1574 on 11426 degrees of freedom
Multiple R-squared:  0.9915,	Adjusted R-squared:  0.9915
F-statistic: 2.212e+05 on 6 and 11426 DF,  p-value: < 2.2e-16

Que no merece mayor explicación. Creo.

Charlatanes y regulación

Así resumen sus autores Regulation of Charlatans in High-Skill Professions:

We study a market for a skill that is in short supply and high demand, where the presence of charlatans (professionals who sell a service that they do not deliver on) is an equilibrium outcome. We use this model to evaluate the standards and disclosure requirements that exist in these markets. We show that reducing the number of charlatans through regulation decreases consumer surplus. Although both standards and disclosure drive charlatans out of the market, consumers are worse off because of the resulting reduction in competition amongst producers. Producers, on the other hand, strictly benefit from the regulation, implying that the regulation we observe in these markets likely derives from producer interests. Using these insights, we study the factors that drive the cross-sectional variation in charlatans across professions. Professions with weak trade groups, skills in larger supply, shorter training periods and less informative signals regarding the professional’s skill, are more likely to feature charlatans.

Sobre la tesis de Sánchez (y no es lo que se espera de mí)

Me preguntaron mucho (antes de los últimos seis o siete circos mediáticos) sobre la tesis de Sánchez, cuando estaba en el candelabro. La bajé, la leí en parte (muchas de las páginas más infumables en diagonal, lo reconozco) y me centré en la parte estadística.

Que es un completo despropósito: es una especie de apéndice que no se usa en el resto del texto, una suerte de añadido para darle una mínima pincelada de matematicidad a la cosa. Hay unas correlaciones basadas en unas pocas observaciones elevadas a la categoría de causalidad; unas regresiones lineales que tienen pinta de haber sido calculadas con Excel; una huérfana fórmula en algo que parece $\LaTeX$ que no tiene que ver con el contexto (parece tomada de algún sitio donde se hablaba de otra cosa), etc. Todo eso (pero nada aprovechable) hay.

¿Es Madrid ciudad para startups (relacionadas con los datos)?

[Esta entrada, simplemente, plantea una hipótesis altamente especulativa; expone una serie de argumentos su pro pero deja la pregunta abierta y la respuesta al buen criterio del lector.]

El año pasado di un curso de estadística bayesiana (¿a alguien le interesaría que lo impartiese en su empresa o institución?) en la UPC, en Barcelona. En un descanso hablé brevemente con una alumna que estaba buscando trabajo en el mundo de la ciencia de datos. Le pregunté si no le interesaría mudarse a Madrid (quienes vivimos en Madrid sabemos que no hay vida inteligente fuera de nuestra provincia, ¿verdad?) y me contestó que en Madrid no había nada, que no había empresas, que no había movimiento; que en BCN había muchas, pero que en la villa no le constaba. Me sorprendió (y lo admito, me ofendió un poquito) y respondí lo obvio: que si BBVA, que si Santander, que si Telefónica, que si Amadeus, que si… ¡tenemos decenas de factorías/churrerías de ciencia de datos por toda la periferia de la M-30!

Modelos y sesgos (discriminatorios): unas preguntas

A raíz de mi entrada del otro día he tenido una serie de intercambios de ideas. Que han sido infructuosos porque no han dejado medianamente asentadas las respuestas a una serie de preguntas relevantes.

Primero, contexto: tenemos un algoritmo que decide sobre personas (p.e., si se les concede hipotecas) usando las fuentes de información habitual. El algoritmo ha sido construido con un único objetivo: ser lo más eficiente (y cometer el mínimo número de errores) posible. Usa además datos históricos reales. Lo habitual.

Goodhart, Lucas y márketing

Abundo sobre lo de ayer.

Una empresa clasifica a sus clientes y los asigna a grupos: malotes, estrella, psepsé, etc. Examina las características de los clientes estrella y entonces reorienta su política comercial en la siguiente dirección:

Tratemos de que nuestros clientes infraóptimos asuman formalmente las características formales de aquellos que más nos gustan.

En gran medida, según lo discutido ayer, el principal logro de ese tipo de políticas es la de debilitar el vínculo entre esas características identificadas por los modelos y la rentabilidad de los clientes.