Competição VK Sup. Track ML. 4º lugar. Quão?

imagem

Neste concurso, realizado como parte da rodada de qualificação do VK up 2020 , faixa ML , foi necessário prever a proporção de públicos em potencial que veriam anúncios exibidos em várias plataformas de publicidade um número específico de vezes: 1,2,3 no futuro.

Essa não era uma competição clássica para o envio de previsões finais para dados de teste conhecidos, mas uma previsão de dados completamente desconhecidos enviados ao modelo no docker lançado no site da competição.

Em geral, essa solução iguala as chances dos participantes e não permite que aqueles que gostam de espiar no teste, enriquecem os dados de treinamento com eles e ajustem o modelo à distribuição dos dados de teste. Aqui todos estavam em pé de igualdade, uma vez que não está claro o que poderia estar nos dados: dados "indesejados", outliers esporádicos, delimitadores inválidos e assim por diante. Mas todas essas nuances ao mesmo tempo nos fazem pensar em lidar com exceções.

Neste concurso, consegui um 4º lugar discreto e quero contar como isso foi possível.

Visão geral dos dados


Os dados iniciais foram apresentados da seguinte forma:

  1. users.tsv – : , , . , , , . ( ), .
  2. history.tsv — "-", ( ) . , , .
  3. O arquivo validate.tsv é um arquivo de validação para o treinamento do modelo, apenas contém dados sobre a que intervalo de tempo e a que preço um anúncio foi exibido para um público específico (plataforma e usuário). Usuários e sites foram dados no formato string (1,5,7,3,14,6).
  4. Arquivo validate_answers.tsv - um arquivo de resposta consiste em três colunas: qual porcentagem (valores de 0 a 1), o público parece classificado 1, 2, 3 vezes. Consequentemente, essas seqüências não estão aumentando.

O objetivo da competição : prever três conjuntos de valores para novos dados do futuro (no formato do arquivo validate.tsv ) - qual a proporção da audiência que verá um anúncio 1,2, 3 vezes.

Mais detalhes sobre a tarefa no site da competição .

Preditores


Os preditores finais que usei são um conjunto de 2 complexos:

  • preditores baseados no histórico e sua comparação com novos dados
  • preditores apenas em dados do futuro

Entre o primeiro complexo, com base no arquivo histórico, foram geradas estatísticas básicas para os pares de sites do usuário agrupados e, posteriormente, sua agregação ao par de sites do usuário nos arquivos de validação e teste. Isso foi seguido pela seleção de preditores de diferentes maneiras - com base nas frequências de uso de preditores nos estágios de particionamento e no próprio modelo e nas validações, de cima para baixo e de baixo para cima. Apesar dos diferentes esquemas de seleção, em geral, tudo se resumia a um conjunto de preditores e, como resultado, havia sete deles.

A interpretação dos preditores do segundo complexo (também havia sete deles surpreendentemente) é geralmente muito mais simples:

1. Delta- diferença de tempo. Isso é lógico? Logicamente: quanto maior o intervalo, maior a probabilidade das visualizações. Obviamente, não há dependência direta, mas fisicamente deveria ser assim; além disso, esse é um dos preditores mais poderosos se os considerarmos separadamente.

2. Delta2 também é uma diferença de tempo, mas é convertida por dia (ou seja, uma divisão inteira por 24). Ou seja, transformamos uma dependência linear em uma por partes. A idéia aqui é simples: não fazemos distinção entre horas, mas intervalos muito longos (dias) definirão sua própria tendência.

3. cpm - o preço em si, da mesma forma: quanto mais caro o preço, maior a probabilidade de visualizar, novamente, é claro, não há dependência direta, mas no "flerte" com outros preditores baseados na história, a dependência é claramente traçada.

4-7. Esses são os pec e cos dos horários de início e término dos anúncios, que também são traduzidos na linha do tempo de 24 horas. O uso dessas funções, em contraste com o tempo linear, permite levar em consideração os intervalos de tempo que passam pelo dia. O uso desses preditores deu imediatamente uma melhora de 1,5 pontos percentuais.

Métrica e resposta


A métrica Taxa de precisão média suavizada do log (doravante SMLAR ) apresentada pelos organizadores .

imagem

Onde a resposta inicial é apresentada na proporção da audiência que visualizou o anúncio 1,2,3 vezes, ou seja, os valores no intervalo [0,1].

A propósito, o KDPV indica o comportamento dessa métrica, ou melhor, não a métrica inteira, mas sua parte ( MAE para o logaritmo do viés das previsões) para todas as combinações da previsão e o valor verdadeiro em todo o intervalo [0,1].

Se você observar atentamente a fórmula da métrica, então: por um lado, essa métrica corresponde aproximadamente à média geométrica das proporções das previsões e ao valor verdadeiro (com viés), que é claramente melhor que a média aritmética (devido ao resultado final mais baixo). Por outro lado, se omitirmos o expoente, que com valores baixos se comporta quase como o expoente de seu grau, a métrica é transformada em MAE pelo logaritmo da resposta com um deslocamento. Assim, para construir modelos ideologicamente corretos, foi necessário usar a resposta inicial com uma função de deslocamento e perda na qual existe um logaritmo de forma explícita ou, inversamente, primeiro usar o logaritmo de resposta de deslocamento e uma função de perda linear ( MAE , eps) Mas, dado o meu modelo (no qual a função de perda não é especificada explicitamente), escolhi a transformação ideal da resposta com base nos resultados do modelo de validação.

Considerei as seguintes opções de resposta - compartilhamentos originais, logaritmo de compartilhamentos, transição para valores absolutos do número de usuários, logaritmo com desvios diferentes (aqui, houve uma tentativa de usar um deslocamento unificado ao passar para valores absolutos, pois o deslocamento de 0,005 é indicado para os compartilhamentos, e o público foi diferente, de 300 a 2500, portanto, o deslocamento deve estar no intervalo de 1 a 12, mas verifiquei apenas os valores 1 e 10) e a raiz do valor absoluto das pessoas que visualizaram o anúncio.

imagem

A figura acima mostra os resultados de dois modelos treinados para uma resposta diferente: o público inicial compartilha e o número absoluto de participantes.

O diagrama superior mostra os valores classificados da resposta verdadeira (por frações da primeira varredura) e os valores previstos para os dois modelos. É imediatamente claro que a maioria dos valores de resposta é muito pequena, portanto, o valor mediano é de cerca de 5%, e isso é apenas para a primeira varredura (para a segunda varredura, a mediana já é menor que 1%, e para a terceira varredura quase 0%, e para essa métrica pequenos valores e erros em eles são muito desagradáveis). Também é claramente visível neste diagrama que o modelo por valores absolutos é qualitativamente melhor, o spread nas estimativas é bastante mínimo e, apesar de os desvios quase não serem visíveis no gráfico em valores pequenos, como resultado, são os erros nesses valores pequenos que afetam fortemente resultado final. O mesmo pode ser visto no KDPV, curvatura muito acentuada em valores baixos, especialmente perto de zero.

O diagrama médio mostra o erro de cada previsão classificada; erros fortes em valores pequenos e sua diminuição com o aumento dos valores de resposta são visíveis.

O diagrama abaixo cria diretamente o diagrama da métrica de destino diretamente com o total acumulado para todos os valores classificados. Quais são as conclusões de tudo isso? A primeira é que a resposta selecionada afeta fortemente os resultados do modelo, mas mais sobre isso abaixo, a segunda conclusão, presta atenção especial a valores pequenos, especialmente próximos de zero, é óbvio que os modelos nem sempre serão capazes de prever um zero puro, portanto, são necessárias correções. E os erros em valores grandes não são tão importantes; primeiro, eles são relativamente pequenos; em segundo lugar, o erro percentual em valores grandes será pequeno e, ao mesmo tempo, fará uma contribuição total mínima à métrica.

Como resultado, de acordo com os resultados de inúmeras experiências, o vencedor com uma margem clara foi a resposta - a raiz dos valores absolutos dos usuários. Ao mesmo tempo, em previsões diferentes (por 1, 2, 3 visualizações), às vezes modelos com logaritmo de valores absolutos também são ganhos, devido à clara prevalência de 0 nas respostas e, como resultado, o logaritmo com algum tipo de viés foi melhor. Mas se você calcula a média, uma raiz simples, sem viés, mostrou bons resultados estáveis, então eu não queria complicar a decisão, mas parar com um método simples e unificado - apenas a raiz do povo.

Qual o motivo do fato de a transição para as pessoas melhorar significativamente o resultado em relação às ações (quase duas vezes)?

Aparentemente, o fato é que, voltando-se para as pessoas, multiplicando a parcela pelo público-alvo ou dividindo todos os preditores pelo mesmo público-alvo, entramos na dimensão relativa a "uma pessoa" e, considerando que a base do meu modelo é regressão, a estimativa final é um tipo de estimativa de probabilidade ponderada em relação a cada preditor. É possível que, se normalizarmos apenas parte dos preditores para o público-alvo, por exemplo, dos preditores do primeiro grupo (a soma de todos os pares, por exemplo), essa normalização aproximará as dimensões de todos os preditores de um único sistema de relatório (por pessoa) e a regressão final , sua resposta seria nada mais que a soma ponderada média das contribuições de cada preditor (que caracterizam uma pessoa) com a probabilidade total de visualização; talvez o resultado seja melhor.Mas, no momento da decisão do concurso, não me aproximei deste lado e trabalhei exclusivamente com uma resposta transformada.

Modelo


De fato, essa seção teve que ser mais elevada, porque foi por causa desse modelo que tivemos que selecionar o tipo de resposta e os preditores necessários para ele (o modelo foi ajustado aos dados) e, de uma maneira ou de outra, mesmo em preditores diferentes, foi possível alcançar um nível aceitável. o resultado é de cerca de 15%. Mas eu queria que, em média, houvesse alguma justificativa para a escolha de preditores específicos; portanto, combinações de preditores foram selecionadas para validação.

Eu usei um modelo de uma família de árvores de modelo de regressão, ou seja, o modelo cubista (modelo de 1992!), E sua implementação no pacote de mesmo nome em R. Em vez disso, o resultado final é a média geométrica de dois conjuntos de modelos, cada um consistindo em três modelos separados, mas em cascata: a previsão do modelo anterior (para uma vista) foi usada como preditor para o segundo e terceiro modelos e a previsão final para a segunda vista como preditor para o terceiro modelo. Ambos os pares de modelos diferiram ligeiramente em preditores e ajustes intermediários, e sua média geométrica foi usada com base no senso comum (bem, validações, com curso público), e o significado é simples: como escrevi acima, atenção especial é dada a previsões nulas e, geralmente, a mínimas , e a média geométrica é exatamente o que ela faz: desaparece a previsão se um deles já é zero (e isso é lógico se um dos modelos mostrou zero, então permaneça,"adiaremos" a previsão de zero).

E, graças à cascata de modelos, o modelo indiretamente "entendeu" (desde as regressões) que cada resposta subsequente "se apega" a essa resposta prevista anteriormente da estimativa anterior, e os preditores restantes corrigem a resposta, que não deve ser mais do que a anterior. Também testei três modelos separados que previam respostas individualmente. O resultado foi mais fraco devido à abundância de zeros na segunda e na terceira varreduras, a família de regressões não pôde ir com precisão suficiente a 0 e, quando adicionamos um “guia” à estimativa anterior, que já é 0 ou próxima a ela, a família de regressões resultante também cai nas proximidades dessa valoriza e ajusta apenas a resposta para a segunda e terceira visualização.

O que há de bom nesse modelo?

Quando vi a tarefa, lembrei-me imediatamente desse modelo, pois em uma das competições anteriores em um problema comparável (relações lineares e suas correções) também era um dos melhores e, em geral, temos dados bastante lineares aqui, há uma relação óbvia entre as quantidades visualizações (a segunda é menor que a primeira, a terceira é menor que a segunda), há poucos dados - apenas 1008 observações, há um pequeno número de preditores, provavelmente algum tipo de dependência linear-quebrada. Além disso, este modelo é muito rápido, a construção levou vários segundos, por isso foi conveniente para ela testar muitas hipóteses. E, no entanto, ela não possui hiperparâmetros (com exceção dos vizinhos (outro parâmetro é uma previsão corretiva), que eu não usei), nos quais eu poderia treinar novamente.

Como é a previsão neste modelo para uma árvore?
, , 100 ( , , 10-20 ), , , , : ( ), , ( , ) .

, , .

Ajustes


Além disso, pequenos ajustes de previsões foram utilizados, a saber: ao mudar do número absoluto de pessoas para suas ações, situações de valores muito pequenos (positivos, pouco mais de 0 ou mais de 1) ocorreram potencialmente e, no caso de valores maiores que 1, seu ajuste não teve um papel maior. (provavelmente havia poucos voos desse tipo e, se eram, então não eram significativos), mas no caso de pequenos valores, era relativamente crítico. Pelo raciocínio, foi aceito que, se eu predizer, por exemplo, 1 pessoa (ou 0,5 pessoa, o arredondamento não foi realizado), então com um público máximo de 2500 (isso é completamente desconhecido dos dados conhecidos no trem, o que realmente acontece nos dados de teste), que é 0,0004 (a propósito, e no trem, o valor mínimo é 0,0004),significa que em algum ponto próximo a esse valor é necessário transformar valores mais baixos em 0 e, como meus modelos são construídos em cadeia, a construção do próximo modelo e suas previsões dependem do zero previsto etc. isso influenciou bastante.

Não fazia muito sentido selecionar um limite para validação (porque o modelo se ajusta a esses dados de qualquer maneira, e eu conheço a distribuição), então olhei para o público (para alguns valores selecionados), mas no final deixei um dos três modelos um belo limite de arredondamento de 0,0005 e, para o segundo teórico, 0,0004.

O ajuste do topo foi mais fácil, valores maiores que 0,95 a serem pagos em 0,95, 0,95 foram feitos com base na parcela máxima dos dados de teste usados ​​com umcom a maior margem (máximo de 0,93 no trem), esse ajuste praticamente não teve efeito sobre o público (partidas individuais são aparentemente públicas), foi deixado exclusivamente para segurança em particular. E foi adicionada uma correção relacionada a zeros, se a previsão for zero na primeira varredura, apesar das previsões dos modelos na segunda e terceira varreduras, as previsões também vão para 0, isso não afetou muito, em algum lugar o segundo sinal (o modelo é praticamente sempre e por isso em si (menos do que o anterior e zero) o fez), mas deixou por segurança em privado.

resultados


Os resultados foram muito dependentes do tipo de resposta e dos preditores selecionados, por exemplo, mesmo se você previsse frações, ou até melhor que o logaritmo, você poderia selecionar outros preditores e o resultado seria de cerca de 16%, e se você atingir valores absolutos e selecionar novamente preditores, então tudo começou em cerca de 15%, então essa era minha linha de base.

E, a propósito, esses resultados já eram suficientes para permanecer entre os cinco primeiros, mas foi interessante "aumentar" mais.

E então, o que melhorou drasticamente esses 15%?

Em geral, apenas a adição de horas, apenas horas (horário de início e término) rendeu 13,97%, alterando-os para seno-cossenos melhorando para 13,44% e, em seguida, melhorando para 13,25%, arredondando pequenos valores para zero e a média geométrica a média dos dois modelos, ou seja, já estava mais sintonizada para um teste (público) e, por isso, ainda fiquei um pouco exagerada com o público.

Nesta competição, foi necessário escolher uma solução. Agora, olhando para o LC, vejo que minha solução escolhida também se mostrou quase a melhor no privado (o local não mudou) (o melhor privat é inferior a 0,02 pontos percentuais), mas se você receber envios nos quais a resposta não foi tão arredondada, então no privado eles eram um pouco piores - 13,6%, ou seja, não havia treinamento forte para o público, mas esse pós-ajuste também não teve um papel muito grande.

Como resultado, o principal sucesso da reserva: preditores selecionados em um cubista de modelo de resposta selecionado , modelos em cascata (1-> 2-> 3) e preditores temporais de s e ( sin , cos ).

Conclusão


Apesar de os vencedores dos primeiros cinco lugares usarem vários modelos, incluindo os modernos (1 lugar - SVR , 2 lugar - catboost , 3 lugar - rede neural , 5 lugar - lightgbm , embora esses vencedores tenham preditores muito mais complexos) , Ocupei o quarto lugar usando um dos modelos clássicos mais antigos de 1992 (até as idéias de SVR apareceram mais tarde) em preditores bastante simples e óbvios, o que confirma mais uma vez: nem sempre é suficiente executar em preditores gerados (essas abordagens eram muito mais baixas na classificação final, cerca de 20%), o senso comum dos preditores, a transformação da resposta e a escolha da função de perda nos modelos (se houver) desempenham um papel significativo aqui.

Em geral, a competição se mostrou interessante e criativa, com conclusões relevantes.

Espero que, na fase final (em tempo integral) da competição, a tarefa não seja menos interessante.

All Articles