Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Issue:
Jira
serverJIRA
serverId0c783de1-186e-383b-975c-a1acd7d76cb5
keyDSERBA1-11904

Objetivo

O objetivo desse experimento é avaliar o modelo Matriz Matrix Fatorization do BigQuery ML para gerar recomendação de vendas de produtos através de feedback implícito, considerando a contagem de pedidos de venda do produto.

Hipótese

Analise exploratória

Experimento

.

Hipótese

O modelo de fatoração de matrizes irá encontrar novas oportunidades de vendas com base nos perfis de compras dos clientes.

Conjunto de dados

Para esse experimento foram considerados os seguintes dados:

Tabelas: SC6 (Itens do pedido de venda), SA1 (clientes), SB1 (Produtos)

Tenant: cbd00146e2184bb2bc734bab89fa3679

Cliente: AGRO SANDRI LTDA

Total de pedidos: 220.066

Total de itens de pedido: 12.181.658


Número de pedidos por filial
FilialDescriçãoAtividadeNúmero de Pedidos
0101001Sandri MatrizComércio atacadista de defensivos agrícolas, adubos, fertilizantes e corretivos do solo108871
0101010CarazinhoComércio atacadista de defensivos agrícolas, adubos, fertilizantes e corretivos do solo43116
0103004Loja TaioComércio varejista de animais vivos e de artigos e alimentos para animais de estimação30917
0103003Alfredo WagnerComércio varejista de animais vivos e de artigos e alimentos para animais de estimação15957
0103009CorupaComércio varejista de animais vivos e de artigos e alimentos para animais de estimação9420
0101002Sao JoseComércio atacadista de defensivos agrícolas, adubos, fertilizantes e corretivos do solo6744
0503001CultivagroComércio atacadista de defensivos agrícolas, adubos, fertilizantes e corretivos do solo4660
0601001Sandri DistribuidoraComércio atacadista de defensivos agrícolas, adubos, fertilizantes e corretivos do solo316

Preparação dos dados

O modelo de fatoração de matrizes exige com input uma tabela com as colunas id do cliente, id do produto e rating.

Para composição da coluna id do cliente foram considerados os campos A1_FILIAL, A1_COD e  A1_LOJA.

Para composição da coluna id do produto foram considerados os campos B1_FILIAL e B1_COD.

Para o calculo do rating utilizamos a contagem de pedidos que o cliente fez de um mesmo produto. Após a contagem de pedidos foi utilizado um método de normalização para calcular o rating em uma escala entre 0 e 1.

Foram avaliados os métodos MinMaxScaler e QuantileTransformer da biblioteca Sckit-Learn. O método QuantileTransformer se mostrou mais robusto em relação aos outliers.

Também foi avaliado o método RobustScaler do BigQuery ML, no entanto o modelo não oferece suporte a clausula OVER( PARTITION BY), Sendo necessária a execução de uma query para cada SKU.

Dessa forma, foi utilizado o método QuantileTransformer da biblioteca Sckit-Learn para cálculo do rating.

A tabela a seguir exibe o rating associado ao número de pedidos para o produto JUREDV006 - MISTURA P/CANARIO C/12 UNID 500GR

Quantidade de ClientesNumero de pedidosrating
1311.000
1300.995
2200.989
1180.981
2170.976
3160.962
13130.953
1110.948
3100.941
290.929
480.915
470.894
160.883
650.866
940.831
1830.768
3920.635
11710.000


Experimento

O Experimento consistiu no treinamento do modelo de fatoração de matrizes do BigQuery ML com o conjunto de dados citado acima.

Para o tuning de hiperparâmetros foi utilizado o algoritmo Vertex AI Vizier (Recomendado na documentação do modelo).  O Vertex AI executa uma mistura de algoritmos de busca avançados, incluindo otimização bayesiana com processos gaussianos. Ele também usa aprendizagem por transferência para aproveitar modelos previamente ajustados. 

Os parâmetros ajustados do modelo foram:

NUM_FACTORS: Número de fatores latentes a serem usados, considerados valores entre 2 e 30.

WALS_ALPHA: Ajusta o impacto do feedback do usuário na confiança da recomendação, equilibrando entradas positivas e negativas na função de perda, considerados valores entre 0 e 50.

L2_REG: Regularização L2, considerados valores entre 0 e 5.

Para tuning dos hiperparâmetros foram treinados 30 modelos. A Tabela a seguir exibe os resultados obtidos para cada combinação de hiperparâmetros.

trial_idhyperparameterstraining_losseval_lossmean_average_precisionmean_squared_errornormalized_discounted_cumulative_gainaverage_rankis_optimal
1{'l2_reg': 1.0000000000000013, 'num_factors': 16, 'wals_alpha': 40.0}0,0081407924530,3250895710,13947166530,0041609766760,53098271890,544753853FALSE
2{'l2_reg': 0.000932293581410731, 'num_factors': 21, 'wals_alpha': 50.0}0,010183531670,35857653780,14342092640,0053478508880,55010325730,5310117337FALSE
3{'l2_reg': 3.918381916094041e-07, 'num_factors': 28, 'wals_alpha': 38.54831959088628}0,074643253280,88233164230,059489163470,062253834140,48565887420,5993957009FALSE
4{'l2_reg': 9.973483902303402e-07, 'num_factors': 15, 'wals_alpha': 46.82757281423023}0,10610764741,0156532380,059948459230,092347599860,48576041360,5997041825FALSE
5{'l2_reg': 4.999999999999985, 'num_factors': 8, 'wals_alpha': 50.0}0,010795335220,31900190120,10315977720,0052789125020,50977285870,5708864756FALSE
6{'l2_reg': 1.7616142828028523, 'num_factors': 28, 'wals_alpha': 50.0}0,008727109450,30740753770,14288219270,0047987826390,5301916880,5462049257FALSE
7{'l2_reg': 0.08499212576564855, 'num_factors': 25, 'wals_alpha': 25.5030172365188}0,0060858472360,36648958630,16916132740,0032594542020,54564445580,5327943418FALSE
8{'l2_reg': 0.015580976190327321, 'num_factors': 30, 'wals_alpha': 50.0}0,0094334157720,6376435160,15005225060,0049858760190,55966994420,5220399237FALSE
9{'l2_reg': 0.8314321010704594, 'num_factors': 30, 'wals_alpha': 9.503134363849387}0,0038491344190,46368574690,16359642560,0022762921050,53100026480,5490352432FALSE
10{'l2_reg': 4.999999999999914, 'num_factors': 29, 'wals_alpha': 21.057259771428143}0,0055275567770,3895517810,1516301550,0029005581090,53123340890,5446150245FALSE
11{'l2_reg': 0.03535716306591547, 'num_factors': 16, 'wals_alpha': 13.353558118216814}0,0047883007150,42848161060,1612738120,0026351918960,53171418610,5494085614FALSE
12{'l2_reg': 0.005102631432882006, 'num_factors': 30, 'wals_alpha': 10.111796678690158}0,0038687629430,46511885180,2044369960,002331292950,54263376240,5398913862FALSE
13{'l2_reg': 0.022215434166465067, 'num_factors': 30, 'wals_alpha': 20.426673337034934}0,0052768300520,38034042320,18801050910,0029234610180,54934249540,5305577439FALSE
14{'l2_reg': 0.0014868484471595774, 'num_factors': 30, 'wals_alpha': 18.41116937576304}0,0056217902880,54116228620,15834107980,0029920620590,54711525290,5344720122FALSE
15{'l2_reg': 0.00037458000135501783, 'num_factors': 30, 'wals_alpha': 0.0}0,0016469860750,66857698560,21891292360,0019511651030,50363249680,5851955414FALSE
16{'l2_reg': 5.0426747288577794e-05, 'num_factors': 30, 'wals_alpha': 0.0}0,0016441979950,66735229680,22127857550,0019471682840,50453483340,5844760296FALSE
17{'l2_reg': 0.006548675713870693, 'num_factors': 30, 'wals_alpha': 0.0}0,0016440923810,67125710560,22058956040,0019471967440,50466176460,5841706202FALSE
18{'l2_reg': 2.0467372996040806e-07, 'num_factors': 30, 'wals_alpha': 0.0}0,0016437902510,66674213110,21974537590,0019463289020,50499872950,5846111577FALSE
19{'l2_reg': 9.431030990757945e-06, 'num_factors': 14, 'wals_alpha': 0.0}0,00171056310,6938608130,16420955980,0020341376560,50250910920,585820107FALSE
20{'l2_reg': 1.520826644574924e-14, 'num_factors': 30, 'wals_alpha': 0.0}0,0016434764240,66697277010,21863004750,0019462457040,504003260,585098055FALSE
21{'l2_reg': 1e-14, 'num_factors': 2, 'wals_alpha': 50.0}0,013089178920,35733394410,075793908460,0057580708280,50763239140,5732263194FALSE
22{'l2_reg': 1.7504184803190196e-11, 'num_factors': 30, 'wals_alpha': 0.0}0,001644482410,66676483470,22364173850,0019472917920,50452110480,584555342TRUE
23{'l2_reg': 1.3708551568265646e-14, 'num_factors': 9, 'wals_alpha': 0.0}0,0017378564410,70761046560,14064402630,0020711416620,49988143510,5883927622FALSE
24{'l2_reg': 1e-14, 'num_factors': 30, 'wals_alpha': 18.13839541172616}0,0055440376160,48068575620,18935857860,0030405979870,55942056260,5261018883FALSE
25{'l2_reg': 1.249569210306576e-09, 'num_factors': 30, 'wals_alpha': 0.0}0,0016456276610,66806102260,22050163750,0019494179520,5053021720,5841699882FALSE
26{'l2_reg': 5.846331764978993e-13, 'num_factors': 30, 'wals_alpha': 5.754905354815194}0,0059125057330,82282782530,06145715020,0032373310320,48375440430,6020142029FALSE
27{'l2_reg': 2.3229183670233683e-10, 'num_factors': 19, 'wals_alpha': 0.0}0,0016863089770,683029870,18882533520,002001915970,50404405870,5852810783FALSE
28{'l2_reg': 1.7847170142715928e-08, 'num_factors': 30, 'wals_alpha': 23.17396002405451}0,0086416932540,7156852570,097830969640,0036486708530,53554193270,5485852874FALSE
29{'l2_reg': 2.009229403547787e-14, 'num_factors': 2, 'wals_alpha': 22.553367846890787}0,0083813353810,45932752350,080886650980,0036591037440,50496244440,5773505599FALSE
30{'l2_reg': 0.00036952502039377233, 'num_factors': 30, 'wals_alpha': 4.338784226622727}0,0028221628370,51684955240,21148960560,0020196353310,53189899790,5547257438FALSE

Após análise dos resultados obtidos foi selecionado o de id 22 para gerar as recomendações de venda, pois além de ter obtido o melhor mean average precision, o modelo obteve resultado similar ao menor mean_squared_error, além de ter obtidos resultados próximos dos melhores modelos considerando as métricas normalized_discounted_cumulative_gain e average_rank.

Resultados

A tabela a seguir exibe a quantidade de recomendações geradas por faixa de rating.

ratingnumero de recomendaçõesmédia de recomendações por clienteclientesSKUs
>= 0.954.605153.6853.005
[ 0.8 , 0.9 )43.552104.3882.878
[ 0.7 , 0.8 )75.056135.6633.857
[ 0.6 , 0.7 )124.080177.1364.974
[ 0.5 , 0.6 )211.100248.9606.419
[ 0.4 , 0.5 )372.2123311.2158.527
[ 0.3, 0.4 )703.5194914.3757.926
[ 0.2, 0.3 )1.537.0238318.61311.354
[ 0.1, 0.2 )4.590.03117825.75717.805
<= 0.11.364.616.14732.34242.19332.525


A tabela a seguir exibe alguns exemplos de recomendações geradas.

ClienteTop 5 produtos compradosTop 5 recomendações
000000SSA1T|0000MACHRC033 | MILHO MOIDO 25KGCOXIAD015 | UREIA PLUS 50 KG COXILHA
HOKKDF003 | HOKKO KASUMIN 1LT CTIIIFERTAD025 | UREIA PLUS 50KG FERTIPAR
SYNGDF022 | RIDOMIL GOLD 1KG CTIIATANDF004 | SHADOW 20 LT
NIORAD001 | FERTILIZANTE NIORG ORGANICO GRANULADOFERTAD018 | ADUBO 05-20-10 50KG FERTIPAR
COXIAD021 | ADUBO 05-20-10 50KGCOXIAD008 | ADUBO 07-28-14 50KG
000001|01PFIZVT001 | DECTOMAX 50MLBRAVVT011 | MERCEPTON INJETAVEL 100ML
MONSDF001 | ROUNDUP 1LT CTIVGERDGP028 | PREGO 17X27 KG GERDAU
GERDGG013 | ARAME GALV. N. 18 10KGPFIZVT032 | TERRAMICINA LA 50ML
TORTVT004 | SAL MINERAL NOVO BOVIGOLD 10 KGPFIZVT001 | DECTOMAX 50ML
AGRIDF007 | GLIFOSATO 1LT AGRIPECGERDGP001 | GRAMPO 1X9 KG GLV GERDAU
0000055MUKY|0000OESTVT002 | STAR ALHO 500GRBAYESP010 | K-OTHRINE 30ML CT II
MACHRC051 | CASCA DE SOJA MOIDA 25 KGFORTVT013 | MATABICHEIRA F. SV ZT 500ML
KONIVT007 | BACTROVET PRATA 500MLMERIVT007 | IVOMEC INJETAVEL 50ML
MACHRC087 | MACHS AVES POSTURA P 5 KGAGROVT001 | SABAO SARNICIDA MATACURA 80GR
PFIZVT032 | TERRAMICINA LA 50ML
00000AAAINT|0000MACHRC029 | MACHS COELHOS 15% 5 KG #COXIAD015 | UREIA PLUS 50 KG COXILHA
MACHRC100 | MACHS PIG CRESCIMENTO F 25KGFERTAD02 | UREIA PLUS 50KG FERTIPAR
ATANDF002 | SHADOW 5 LTATANDF004 | SHADOW 20 LT
SYNGDF038 | ACTARA 250WG 1KGIHARDF022 | FLUMYZIN 100GR
COXIAD015 | UREIA PLUS 50 KG COXILHAFERTAD018 | ADUBO 05-20-10 50KG FERTIPAR


Referências 

Tutorial do modelo de fatoração de matrizes do BQML utilizando feedback implícito:

https://cloud.google.com/bigquery/docs/bigqueryml-mf-implicit-tutorial?hl=pt-br

Documentação do modelo de fatoração de Matrizes:

https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-create-matrix-factorization

Comparação de diferentes métodos de normalização para dados com outliers:

https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html#plot-all-scaling-minmax-scaler-section

Método de normalização RobustScaler BigQuery ML:

https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-robust-scaler?hl=pt-br#example

...