Decisão baseada em dados sobre o exemplo da escolha de uma cor para pintar paredes

Começando a escolher uma cor para pintar a parede da sala, me deparei com uma coisa interessante. Todo o processo, desde o início, começou a se parecer com o trabalho em algum projeto analítico de TI-ML-Blá-blá-blá.

Há também um cliente que realmente não entende exatamente o que ele quer, mas quer que tudo seja bom e ele gostou. Ainda existem algumas partes interessadas por parte do cliente que não podem concordar com o que é "bom". Existem algumas reformulações do problema, que, sob uma grande questão, são relevantes para esse "bem", mas pelo menos de alguma forma resolvidas. Há uma seleção de métodos de solução e tentativas de implementá-los. Existe uma iteração, que implicitamente, mas monotonamente, leva a algum tipo de solução que seria adequada a todos. E existem algumas conclusões estranhas que dificilmente poderiam ser tiradas em um projeto "real", porque, devido ao nervosismo geral e à participação no processo monetário, o foco da atenção raramente para nesses locais do processo.



Em geral, se você considerar a escolha da cor na sala, como um processo analítico, pode ser interessante.

Declaração do problema


Há coisas mais repugnantes e irritantes do que a escolha de várias pessoas da cor em que pintar a parede da sala, mas são poucas. Na maioria das vezes, eles estão associados a algum tipo de doença ou lesão.

A visualização metódica das flores evoca um mar de associações com hospitais, supermercados, agências governamentais, cozinhas soviéticas em apartamentos comuns e banheiros públicos. E se isso não lhe causar, o interlocutor tinha exatamente essa cor na parede do corredor da escola, onde o interlocutor passou os piores anos de sua vida. A irritação tende a aumentar e uma decisão a não ser tomada.

Assim, a tarefa surge. Os critérios de qualidade para resolver esse problema são os seguintes:

KPI: O grau de satisfação de todas as partes interessadas na cor das paredes da sala. Um KPI positivo é diretamente inatingível antes de pintar como tal (mas não tenho vontade de repintar 10 vezes), então tenho que usar outra coisa.

KPI realista: o grau de satisfação de todas as partes interessadas com a escolha da cor para pintar a parede (deve-se notar imediatamente que uma escolha satisfatória de cores não garante satisfação dessa cor na parede, mas não há muita escolha. As decisões devem ser tomadas em condições nas quais o resultado das decisões ainda é desconhecido)

Dados de entrada:

  • Quarto
  • Paleta RGB
  • Pessoas interessadas que escolhem uma cor para o quarto

Bem, aqui começa o processo, familiar a qualquer pessoa que implemente projetos corporativos.

Mas não estou fazendo isso com o dedo, pois agora vou inventar algo inteligente e matemático!


Olhe para as cores e veja claramente como ficará na parede, basicamente só podem pessoas com educação artística. Mas eles não somos nós. Precisamos descobrir como correlacionar as cores com as paredes, para que a decisão seja tomada mais rapidamente e de alguma forma mais justificada. E o paint.net é a nossa salvação. Você pode tirar uma foto panorâmica da sala, apagar as paredes da foto e pintá-las com algo. Talvez isso ajude a tomar uma decisão que agrade a todos? No nosso caso, tudo começou com isso:



Aqui é uma sala com paredes mal usadas. Agora você pode pintar as paredes em qualquer coisa e ver se gostamos ou não. Por exemplo, faça algo assim:



E é meio maravilhoso.

Mas não!

O mundo dos pôneis rosa com os olhos arrancados não é sobre nós. A discussão das partes interessadas sobre a escolha da cor ao sobrepor a foto também rapidamente pára. Algumas horas de confusão com tinta e sem consenso. No entanto! Temos alguma ferramenta. Pode ser usado. Se não conseguirmos, talvez haja pessoas que possam fazer isso por nós?

Solução especializada


Os especialistas ligaram para todos os assinantes interessados ​​da VK. A aposta foi que o ano de 2018 está no quintal, mas ainda temos um país de conselhos. Que todos comecem a aconselhar a todos.

Para a obra-prima da fotografia acima mencionada, foi feito um “site”, que continha uma foto da sala e um seletor de cores que permitia mudar a cor das paredes. Um link para o site foi publicado em VK com um pedido para ajudar na escolha da cor.

Especialistas expressaram várias opiniões, compartilharam suas opções. Infelizmente, isso não levou a consenso, mas causou várias mudanças nas prioridades estéticas entre as partes interessadas. E esses vieses levaram a um consenso.

Caminho para o aprendizado de máquina


Os especialistas tiveram dois problemas.

  • A opinião do especialista nem sempre coincide com a do interessado,
  • Havia poucos especialistas e todas as suas opiniões não podiam ser reunidas para tomar uma decisão média.

Juntos, os dois problemas não forneceram uma solução.

  • Se houvesse muitos especialistas, eles poderiam esmagar a quantidade com relação a alguma opção,
  • Se houvesse poucos deles, mas todos tivessem a mesma opinião das partes interessadas, alguém poderia simplesmente concordar com os especialistas.

Mas a própria formulação do problema da opinião de especialistas deu a chave para a próxima iteração.

Você precisa ter muitas classificações. Se houver muitos deles, e todos os votos forem para algo específico, é mais fácil tolerar isso. Mas como fazer isso?

Por exemplo, para criar um pequeno aplicativo de desktop que aplicaria opções gama aleatórias à imagem, e as pessoas interessadas classificariam essas opções de 0 a 10. Assim, mais de 300 classificações de cores diferentes foram coletadas no formato:

 beginpmatrixr em[0,255]g em[0,255]b em[0,255]V em[0,10] endpmatrix

Cores classificadas como 0, é claro.

Agora, temos uma amostra com estimativas, embora não seja muito conveniente para análise. Você pode reformular que V é de 0 a 10, isso não é realmente uma pontuação de cores, mas o número de pessoas que votaram nessa opção. E transformar um vetor quadridimensional (r,g,b,V)T em v tridimensional (r,g,b)T . Zeros desaparecem naturalmente. E cada vetor agora é uma voz igual para a tonalidade correspondente. É conveniente adicionar pequenas compensações aleatórias aos valores RGB, para que você não tenha exatamente os mesmos tons.

Nesta formulação, é obtida uma formulação típica do problema de encontrar a densidade máxima de uma distribuição multidimensional. I.e. estamos procurando uma área na qual as pessoas "votem" com mais frequência.

Se quisermos reforçar a influência de classificações altas, podemos usar V² ao converter 4-d para 3-d. Então, uma pontuação de 2 converte 4 votos e uma pontuação de 4 em 16 votos. Assim, podemos reduzir a influência daquelas cores pelas quais votamos, mas não diretamente.

ML


As duas coisas simples que vêm à mente são que você provavelmente pode aproximar a distribuição resultante com uma distribuição normal multidimensional ou uma função quadrática em 3-d (algo tão abobadado com um máximo pronunciado). Não é que tudo tenha sido realmente descrito de maneira bonita por essas funções simples, mas nesse caso foi definitivamente possível fechar os olhos para isso.

Para aproximar o normal multidimensional , é necessário estimar apenas com base nos dados a matriz de covariância e a expectativa para todas as distribuições marginais . Depois disso, você pode calcular analiticamente o máximo, mas é muito mais fácil (para o cérebro) simplesmente passar por todas as combinações de cores possíveis com uma etapa, substituindo os parâmetros de distribuição e os valores de cores na fórmula de distribuição. Então pegue o ponto máximo.

max(N( boldsymbol mu, boldsymbol Sigma, boldsymbolColor)),onde

 boldsymbol muéovetor espaçodeexpectativa, boldsymbol Sigmaéamatriz espaçodecovariância, boldsymbolColor=perm((r,g,b)T),perm()todo espaçopossível predefiniçãodeespaço permutaçõesdeespaço coresdeespaço,
A aproximação pelo normal multidimensional e a busca pelo seu máximo deram uma boa cor azul-violeta do grau desejado de neblina:



Ampliar é ainda mais fácil.

Para fazer isso, no matlab, uma função do formulário foi definida para todas as variações possíveis i,j,k :

C(r,g,b, boldsymbolc)= sumi,j,kcijkrigjbk,(i,j,k) emN,i+j+k le2

Para todos os dados possíveis, os coeficientes foram alterados cijk e o método de simulação de recozimento minimizou o erro quadrático da densidade de pontos nas proximidades:

min( sumD(C(r,g,b, boldsymbolc)p(r,g,b)))2),emque

 espaçop(r,g,b)éadensidadede vozesespaciais espaçoem vizinhançaespacial espaçodoponto espaço(r,g,b).
Após definir os coeficientes polinomiais, o máximo foi calculado calculando a derivada da função C usando a caixa de ferramentas simbólica e aprofundar as raízes da derivada. Havia várias raízes, mas uma era adequada para as restrições nos valores de cores.

A aproximação por uma função quadrática e a busca pelo seu extremo deram uma versão semelhante com uma distribuição normal. Um pouco mais azul e menos vermelho:



Mas às vezes você não consegue pensar em aproximações e apenas escrever uma rede neural, que alimenta todos os dados. Não faz sentido falar sobre os parâmetros da rede neural, mas havia muitas opções, muitas arquiteturas e várias perversões diferentes sobre variáveis. Como resultado, resultou em uma opinião bastante estável sobre a melhor cor. Avaliações anteriores da “bondade” das cores fizeram a rede funcionar em quase tudo, exceto no verde. Ela acrescentou generosamente verde.



A propósito, se reformularmos as densidades como classes, por exemplo, procurando alguns valores maiores que 5, e usarmos o Gradient Boosting Classifier para encontrar as áreas do espaço onde as estimativas positivas são mais densas, obteremos o mesmo.

E aqui novamente se manifestou um problema, que muitas vezes se manifesta em projetos reais ao apresentar os chamados "resultados intermediários". Parece assim:

É claro que tudo isso é muito bom: redes neurais, distribuições, mas por alguma razão eu não quero isso ... eu gostaria que fosse bom.

O momento aqui é muito interessante: o que é considerado bonito em uma fotografia não é necessariamente o que você deseja colocar na parede, se você a avaliar com mais cuidado novamente!

Assim, em projetos reais, alguns indicadores, a confiança na qual antes pareciam objetivos e construtivos, de repente ficam deprimidos ao obter um resultado neles (mesmo que, em geral, funcione bem em termos de números). E uma coisa permanece. Encontre todo o bem que conseguimos e apresente algumas fotos bonitas para que todos fiquem felizes.

Visualização


Vamos desenhar lindamente de alguma forma, como votamos nas cores? Por exemplo, criaremos um gráfico de dispersão em 3-d no matlab para HSV (255.255.255), onde os locais pelos quais eles votaram serão representados por bolas da cor desejada. Quanto maior a bola, mais eles votaram. No nosso caso, ficou assim:

Lamento não ter trazido o HSV para 360/100/100, era preguiça e tudo de 0 a 1 no matlab.

Quanto maior a bola, mais cores você gosta.

A partir das projeções deste gráfico, inclusive, torna-se óbvio por que métodos diferentes deram os resultados que deram. Por exemplo:


Projeção Cor / Matiz

A partir da projeção Color / Hue, pode-se ver que, se você construir um Gaussiano ou o aproximar por uma função quadrática, o máximo estará em algum lugar entre azul e violeta. Nesse caso, a cor máxima será de cerca de 100 e cores muito brilhantes não serão selecionadas. Uma rede neural na qual o espaço será bastante complexo com um grande número de extremos locais tem a capacidade de levar em conta a parte verde. Aparentemente, havia em algum lugar um pico rosado, mas um pouco menor, então eu não cheguei ao resultado final. Etc.

Olhando para a visualização revelou três pseudo-agrupamentos visíveis.



As habilidades médias de todos os métodos brutos fundiram com alegria azul claro e azul escuro em um resultado azul médio. Ao mesmo tempo, a lógica sugeria que não vale a pena pintar a sala em cores escuras (mesmo que não pareçam nada na foto), portanto esse cluster deve ser descartado. E ninguém gostava muito de verde, porque causava todo tipo de associação hospitalar-comunitária durante muito tempo olhando. Por que há algum tipo de matemática aqui, hein?

No cluster restante, você só precisava pegar a média condicional e finalizá-la de alguma forma com as mãos.



Sobre isso, todas as partes interessadas concordaram que, em geral, esse é um compromisso, que vale a pena parar.

Depois de algumas semanas, a realidade não distorceu muito as expectativas (embora fosse um pouco mais rosada do que as realidades deveriam ser) ...



Uma cor tão rosada em si mesma, é claro, é uma coisa duvidosa, mas nós mesmos a queríamos. Agora resta apenas comprar móveis da cor apropriada. Hum. Mas não pense no arranjo ideal automático de móveis na sala? Esse é um problema típico de otimização convexa ...

Conclusões


Estando ao mesmo tempo por parte do cliente e do contratado, fiquei surpreso ao ver como eu próprio não consigo entender um assunto em que estava interessado em resolver os dois lados. Além disso, fiquei surpreso ao ver como aquelas coisas que eu pensava serem objetivas e deduzidas diretamente dos dados que me satisfazem como artista não podem me satisfazer como cliente.

A loucura aqui acrescenta que eu mesmo compilei os dados, indicando diretamente neles o que exatamente poderia me satisfazer. E, aparentemente, eu não conseguia compilá-los de maneira adequada, por algum motivo que eu mesmo não estava muito claro. Por exemplo, dei notas altas às cores escuras, embora elas obviamente não pudessem ser selecionadas no final. Porque Porque a imagem era fofa. A tarefa real era completamente diferente, mas a escolha de uma cor a partir de considerações mais complexas na máquina não era realista.

Por fim, nos dados que gerei, a solução estava oculta. Mas como chegou a uma decisão imediatamente, sem essas danças estranhas com um pandeiro, que corrigiram minha própria idéia do que eu precisava (ou certamente não precisava), não estava muito claro. Eu olhei para a visualização com bolas e antes de começar a procurar o máximo usando métodos diferentes. Mas eu vi os "agrupamentos" nele somente depois.

Source: https://habr.com/ru/post/pt421795/


All Articles