
Una vez que decidimos ver qué intereses estacionales tienen los usuarios de 2GIS en diferentes ciudades. Se esperan estallidos de interés en flores, regalos de Año Nuevo y llantas. Decidimos no limitarnos a ellos e ir más allá al verificar todas las áreas de actividad en las 113 ciudades de presencia.
En este artículo, le diré cómo buscamos la estacionalidad y qué características del comportamiento del usuario se encontraron en ellos.
¿Por qué necesitas medir la estacionalidad?
Las necesidades de los usuarios de 2GIS cambian a lo largo del año: bienes de consumo, servicios, construcción, servicios públicos. El conocimiento estacional es útil por varias razones:
- Estamos comenzando a comprender más sobre los valores e intereses de nuestros usuarios en este momento y en el futuro cercano.
- Podemos "predecir" la solicitud de un usuario.
- Los gerentes de ventas se centran en áreas de actividad relevantes para los usuarios.
Tipos de trafico
Antes de hablar sobre cómo procesamos el tráfico, vale la pena aclarar que lo dividimos en varios tipos.
La recuperación es un tipo de tráfico en el que el usuario conoce exactamente la empresa con la que desea contactar. Necesita aclarar la dirección, el horario de trabajo o encontrar la entrada. En este caso, la búsqueda se realiza por el nombre de la empresa, el número de teléfono y otros atributos de la propia empresa.
El tráfico de descubrimiento es cuando un usuario formula una solicitud en términos más generales: "muebles tapizados", "comer en Lenin", "baños". Es decir, el usuario explora las opciones y ofertas del mercado, a menudo llamando a organizaciones o visitando sus sitios.
El tráfico geográfico ocurre cuando un usuario trabaja con un mapa. Por ejemplo, está buscando farmacias o estaciones de servicio más cercanas a la casa.

Todas las solicitudes de los usuarios y todas las acciones posteriores están marcadas en el tráfico. Para buscar la estacionalidad, el análisis tomó descubrimiento + geo-tráfico. Dado que, en primer lugar, corresponden a la manifestación de los intereses del usuario y, en segundo lugar, pueden controlarse. No puede administrar el tráfico de recuperación.
Sobre tendencias
Gráfico 1: ¿Ves estacionalidad?Antes de comenzar a buscar la estacionalidad, debe tener en cuenta los cambios en el volumen de tráfico en diferentes tipos de dispositivos. Tomamos en cuenta que la audiencia de las versiones de WinPhone y PC está disminuyendo constantemente. Mientras que en línea, Android, iOS están en constante crecimiento.
Prueba de hipótesis
Los criterios para determinar la estacionalidad se desarrollan para series estacionarias. Es necesario probar la hipótesis de que la serie contiene una tendencia. Consideraremos las series de tiempo como un proceso aleatorio. Entonces los elementos de la serie son realizaciones de alguna variable aleatoria.
Podemos probar la hipótesis de que todos los valores de la muestra pertenecen a la misma población con m promedio. Entonces la hipótesis principal es:
contra la hipótesis de la tendencia rival
$ en línea $ H_1: ∣m_ {i + 1} −m_i∣> 0, i = 1,2, ..., N - 1 $ en línea $
donde N es el número de elementos en una fila.
Para probar la hipótesis, debe usar uno de los criterios para la importancia de la tendencia. En base a los estudios,
se eligió el
criterio de inversiones .
Si la hipótesis no se rechaza, entonces es necesario eliminar la tendencia de los datos. Suponemos que en nuestros datos solo puede haber una tendencia lineal. ¡Oh, sería exponencial! También asumiremos que no podemos tener más de un punto de inflexión.
Gráfico 2: Series temporales (del Gráfico 1) y su tendenciaSobre un rastrillo y descubrimientos
Esbozamos los límites del estudio y comenzamos a probar hipótesis. Por supuesto, no fue sin rastrillos y descubrimientos: dado que la tarea no se limitó a los servicios populares en ciudades con más de un millón de personas, hemos compilado una lista de casos especiales a los que vale la pena prestarles atención.
- Lagunas de datos. En áreas estrechas de actividad, algunas fechas pueden no tener datos. El caso es especialmente relevante para las ciudades pequeñas. Esta característica debe tenerse en cuenta para la correcta construcción de la regresión.
- Si se encuentra un punto de inflexión, considere su proximidad al principio o al final de la fila. Es posible una mala interpretación del comportamiento de una serie en condiciones de contorno. Por ejemplo, en el gráfico 2, los primeros 120 puntos parecerían indicar un crecimiento lineal por partes. Pero, de hecho, mostró estacionalidad, que veremos más adelante.
- Elegir el punto de referencia correcto. Para obtener los coeficientes correctos, debe usar una serie, comenzando desde el primer punto significativo, y recordar la coordenada X de este punto (la fecha en que aparecieron los datos en la serie). La tendencia se construirá en el sistema de coordenadas con 0 en este punto. Este caso es relevante para comparar esferas entre sí. Por ejemplo, en 2GIS las ciudades no se lanzaron simultáneamente y, en consecuencia, comenzaron a enviar estadísticas en diferentes momentos. Lo mismo es cierto para la aparición de nuevos negocios, como, por ejemplo, las barberías.
- Quizás lo más difícil es encontrar un compromiso entre el nivel de detalle y la adecuación de la cantidad de datos. Nos decidimos por tres dimensiones: ciudad, campo de actividad, plataforma de dispositivo de usuario.
Gráfico 3: una serie sin tendenciaBúsqueda de estacionalidad
Después de restar las tendencias correspondientes de la serie temporal, podemos proceder a la tarea de encontrar la estacionalidad. Consta de dos subtareas:
- Detección del hecho de la presencia de estacionalidad en una serie.
- Definiciones de temporadas altas y bajas: esto es lo que tiene valor práctico.
Detección de correlación
Hay funciones de búsqueda de correlación listas para usar tanto en R como en Python. Utilizamos la correlación de Pearson. Cuando trabaje con vectores de intereses del usuario, tenga en cuenta lo siguiente:
- Después de restar la tendencia de la serie original, se pueden obtener valores negativos. Esto es normal en esta etapa.
- Para nuestra tarea, es suficiente verificar la correlación de series de tiempo de 365 días. Sí, la influencia de un año bisiesto es insignificante y no lo tenemos en cuenta.
- Para buscar la estacionalidad, debe tener datos de al menos dos períodos completos. Nuestros cálculos utilizaron datos de cuatro períodos.
Estamos buscando la correlación de dos vectores: X: [0; N-365], Y: [366; N] Donde N es la longitud de la fila.
Gráfico 4: Detección de correlaciónObtén el beneficio
El hecho de la presencia de estacionalidad no tiene valor práctico. Debe comprender qué atención se prestará al campo de actividad el próximo mes: mayor, menor o normal.
Se eligió una escala multiplicativa como resultado final. Donde la unidad es el nivel "normal" de interés del usuario en el campo de actividad. Un valor distinto de uno caracteriza un aumento o disminución múltiple en el interés.
En nuestro caso, [por ahora] una escala suficientemente temporal que dura un mes es suficiente. Para determinar el nivel 1, se utilizó la mediana de atención mensual del usuario. Luego calculó la desviación múltiple de esta mediana.
Gráfico 5: Estacionalidad anualEs hora de revelar el secreto de qué datos muestran los gráficos del artículo. En este y en todos los gráficos anteriores, clics en los museos de San Petersburgo. Como se puede ver en el último horario, los museos son populares durante las vacaciones de enero, cuando hay muchos días libres y en verano.
¿Y si ...
... tomar y alimentar el algoritmo no los intereses de los usuarios, sino, por ejemplo, las ventas?
El algoritmo de acciones es el mismo:
- Estamos buscando tendencias. El público de las ciudades está creciendo, y con él crece el número de anunciantes. Es necesario restar la tendencia asociada con la creciente popularidad de 2GIS como plataforma de publicidad para obtener aumentos y recesiones de la industria.
- Encontramos correlaciones de ventas de año en año, y luego temporadas altas y bajas.
Tomó una serie de ajustes
La publicidad en 2GIS se vende mensualmente, por lo que tomaron un mes para la escala, pero la estacionalidad del usuario se analizó hasta un día. Para la compatibilidad con versiones anteriores, adaptamos los algoritmos para trabajar con series arbitrarias, donde el eje x es el número de serie del punto y el eje y tiene algún valor (en este nivel, la semántica del valor no importa).
El punto de referencia de una serie de ventas (origen), por regla general, no coincide con el punto de referencia de estacionalidad del usuario. Después de todo, al principio la ciudad gana audiencia, y solo entonces aparece la publicidad. En esta etapa, no debe combinar los resultados de dos estacionalidades.
Como las ventas son mensuales, tenemos significativamente menos puntos en las filas. En este caso, la correlación debe considerarse en 12 puntos en lugar de 365.
Gráfico 6: Estacionalidad de las ventas.Como paso final, decidimos imponer la estacionalidad de las ventas a la estacionalidad del usuario. Ahora puede ver dónde vendemos anuncios más tarde de lo necesario y retrasar la demanda de los usuarios.
Por ejemplo, los usuarios están interesados en comprar concreto en Nizhny Novgorod de abril a octubre. Mientras que las empresas se dedican a la promoción solo de mayo a septiembre.
Gráfico 7: La intersección de la estacionalidad del usuario y la estacionalidad de las ventas (verde - usuario, azul - ventas, rojo - coincidencia)Que hizo
Todo lo descrito anteriormente se implementa en MS SQL Server 2016. Para buscar la regresión lineal y la correlación, se usa R, que se ha incluido en el servidor desde la versión 2016. Y dado que ya tenemos Data Warehouse y análisis de estadísticas de usuario en SQL Server, resultó ser muy conveniente usar R para cálculos matemáticos

Ejemplo de uso de R de TSQL:
INSERT INTO
Donde:
- la variable R contiene directamente el código R;
- language = N'R ': indica que el script pasado en la variable R contiene código de idioma R. En SQL Server 2017, además de R, puede usar language = N'Python'. Luego, en consecuencia, el código de Python debe pasarse al parámetro del script.
- input_data_1: contiene una consulta SQL, cuyos resultados dentro del código R se pueden acceder como InputDataSet;
- El resultado del procedimiento será RecordDataSet, formado como OutputDataSet <- calcAllTrend (data = InputDataSet);
- Asegúrese de especificar el formato del registro resultante: el número y los tipos de columnas. En este caso, el formato de OutputDataSet está determinado por la tabla #tmp donde se registran los resultados. O puede usar WITH RESULT SETS para describir el conjunto de registros resultante.
En nuestro caso, resultó que una parte significativa del tiempo de ejecución sp_execute_external_script está ocupada directamente al acceder a los Servicios R. El código R en sí funcionó rápidamente.
Permítame recordarle que queríamos calcular las tendencias y la estacionalidad para todas las ciudades que cubren 2GIS y todas las áreas de actividad. Por lo tanto, decidimos enviar no una fila (Número, Valor) a InputDataSet, sino varias a la vez, agrupadas por DataId. Y el ciclo DataId se organizó dentro de R. Por lo tanto, ahorramos significativamente al llamar a R Services.
Hechos de la vida
Lees el artículo hasta el final, es recomendable. Para entretenerlo antes de los resultados, compartimos hechos interesantes identificados durante el análisis de la estacionalidad.
Hecho No. 1
Los automovilistas saben por experiencia personal que la temporada de búsqueda de neumáticos y ajuste de neumáticos es primavera y otoño. Pero, para ser precisos, la temporada en diferentes ciudades puede ser muy diferente. Por lo tanto, al formar colecciones y tableros (pantallas de inicio en productos), es importante considerar la estacionalidad en cada ciudad específica.
Gráfico 8: Estacionalidad de neumáticos en Krasnodar, Novosibirsk y NorilskHecho No. 2
La estacionalidad puede diferir incluso dentro del mismo campo de actividad, en diferentes tipos de dispositivos. Por ejemplo, los "regalos de Año Nuevo" en la pantalla grande comienzan a buscar en octubre. Mientras que en las versiones móviles, la búsqueda comienza un mes después y el pico se acerca al Año Nuevo.
Gráfico 9: Busque regalos de Navidad en línea y en la versión móvil de 2GISHecho No. 3
En el proceso de trabajar en la estacionalidad, descubrimos una esfera de actividad, cuyo interés se muestra una vez cada tres meses. Y esto es cierto para diferentes ciudades de Rusia.
Intenta adivinar qué tipo de negocio es este.
Spoiler tipCiudades muy diferentes de Rusia. Entonces, ni el clima, ni la región, ni las empresas locales, sino algo globalmente común.
3 meses = trimestre. Presta atención a April ...
Gráfico 10La respuestaEstos son fondos de seguro social: los informes trimestrales se presentan al FSS una vez cada tres meses, y el pico de abril se explica por un cambio en los formularios de informes a partir del 1 de enero de cada año.
Una vez más sobre lo principal
¿Vas a buscar correlaciones en los datos? No olvide preparar estos datos: brechas de proceso, libres de tendencias y emisiones. Tenga en cuenta que la preparación llevará la mayor parte del tiempo.
En la etapa de trabajar con filas, abstraiga lo más posible de la semántica: trabaje con el valor y el número de serie del punto, luego el código será más fácil de reutilizar. La visualización en cada etapa del procesamiento será de gran ayuda.
PD: la tarea de encontrar tendencias y estacionalidad se realizó como parte de otra tarea: predecir cambios en la atención del usuario después de adquirir publicidad en 2GIS. Estoy listo para decirle cómo hicimos el pronóstico, si está interesado.