Partilhar via


pair_probabilities_fl()

Aplica-se a: ✅Microsoft FabricAzure Data Explorer

Calcular várias probabilidades e métricas relacionadas para um par de variáveis categóricas.

A função pair_probabilities_fl() é uma UDF (função definida pelo usuário) que calcula as seguintes probabilidades e métricas relacionadas para um par de variáveis categóricas, A e B, da seguinte maneira:

  • P(A) é a probabilidade de cada valor A=a
  • P(B) é a probabilidade de cada valor B=b
  • P(A|B) é a probabilidade condicional de A = um dado B = b
  • P(B|A) é a probabilidade condicional de B = b dada A = a
  • P(A∪B) é a probabilidade de união (A=a ou B=b)
  • P(A∩B) é a probabilidade de interseção (A=a e B=b)
  • A métrica de comparação de precisão é calculada como P(A∩B)/P(A)*P(B). Para obter mais informações, consulte métrica de aumento.
    • Um aumento próximo a 1 significa que a probabilidade conjunta de dois valores é semelhante ao esperado no caso de ambas as variáveis serem independentes.
    • O Lift >> 1 significa que os valores coocorrem com mais frequência do que o esperado sob a suposição de independência.
    • O aumento << 1 significa que os valores são menos prováveis de coocorrer do que o esperado sob a suposição de independência.
  • O coeficiente de similaridade de Jaccard é calculado como P(A∩B)/P(A∪B). Para obter mais informações, consulte Coeficiente de similaridade de Jaccard.
    • Um coeficiente de Jaccard alto, próximo a 1, significa que os valores tendem a ocorrer juntos.
    • Um coeficiente de Jaccard baixo, próximo a 0, significa que os valores tendem a ficar separados.

Sintaxe

pair_probabilities_fl(A, B, Escopo)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
A scalar ✔️ A primeira variável categórica.
B scalar ✔️ A segunda variável categórica.
Escopo scalar ✔️ O campo que contém o escopo, de modo que as probabilidades de A e B sejam calculadas independentemente para cada valor de escopo.

Definição de função

Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:

Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.

Importante

Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de pair_probabilities_fl(), consulte Exemplo.

let pair_probabilities_fl = (tbl:(*), A_col:string, B_col:string, scope_col:string)
{
let T = materialize(tbl | extend _A = column_ifexists(A_col, ''), _B = column_ifexists(B_col, ''), _scope = column_ifexists(scope_col, ''));
let countOnScope = T | summarize countAllOnScope = count() by _scope;
let probAB = T | summarize countAB = count() by _A, _B, _scope | join kind = leftouter (countOnScope) on _scope | extend P_AB = todouble(countAB)/countAllOnScope;
let probA  = probAB | summarize countA = sum(countAB), countAllOnScope = max(countAllOnScope) by _A, _scope | extend P_A = todouble(countA)/countAllOnScope;
let probB  = probAB | summarize countB = sum(countAB), countAllOnScope = max(countAllOnScope) by _B, _scope | extend P_B = todouble(countB)/countAllOnScope;
probAB
| join kind = leftouter (probA) on _A, _scope           // probability for each value of A
| join kind = leftouter (probB) on _B, _scope           // probability for each value of B
| extend P_AUB = P_A + P_B - P_AB                       // union probability
       , P_AIB = P_AB/P_B                               // conditional probability of A on B
       , P_BIA = P_AB/P_A                               // conditional probability of B on A
| extend Lift_AB = P_AB/(P_A * P_B)                     // lift metric
       , Jaccard_AB = P_AB/P_AUB                        // Jaccard similarity index
| project _A, _B, _scope, bin(P_A, 0.00001), bin(P_B, 0.00001), bin(P_AB, 0.00001), bin(P_AUB, 0.00001), bin(P_AIB, 0.00001)
, bin(P_BIA, 0.00001), bin(Lift_AB, 0.00001), bin(Jaccard_AB, 0.00001)
| sort by _scope, _A, _B
};
// Write your query to use the function here.

Exemplo

O exemplo a seguir usa o operador invoke para executar a função.

Para usar uma função definida por consulta, invoque-a após a definição da função inserida.

let pair_probabilities_fl = (tbl:(*), A_col:string, B_col:string, scope_col:string)
{
let T = materialize(tbl | extend _A = column_ifexists(A_col, ''), _B = column_ifexists(B_col, ''), _scope = column_ifexists(scope_col, ''));
let countOnScope = T | summarize countAllOnScope = count() by _scope;
let probAB = T | summarize countAB = count() by _A, _B, _scope | join kind = leftouter (countOnScope) on _scope | extend P_AB = todouble(countAB)/countAllOnScope;
let probA  = probAB | summarize countA = sum(countAB), countAllOnScope = max(countAllOnScope) by _A, _scope | extend P_A = todouble(countA)/countAllOnScope;
let probB  = probAB | summarize countB = sum(countAB), countAllOnScope = max(countAllOnScope) by _B, _scope | extend P_B = todouble(countB)/countAllOnScope;
probAB
| join kind = leftouter (probA) on _A, _scope           // probability for each value of A
| join kind = leftouter (probB) on _B, _scope           // probability for each value of B
| extend P_AUB = P_A + P_B - P_AB                       // union probability
       , P_AIB = P_AB/P_B                               // conditional probability of A on B
       , P_BIA = P_AB/P_A                               // conditional probability of B on A
| extend Lift_AB = P_AB/(P_A * P_B)                     // lift metric
       , Jaccard_AB = P_AB/P_AUB                        // Jaccard similarity index
| project _A, _B, _scope, bin(P_A, 0.00001), bin(P_B, 0.00001), bin(P_AB, 0.00001), bin(P_AUB, 0.00001), bin(P_AIB, 0.00001)
, bin(P_BIA, 0.00001), bin(Lift_AB, 0.00001), bin(Jaccard_AB, 0.00001)
| sort by _scope, _A, _B
};
//
let dancePairs = datatable(boy:string, girl:string, dance_class:string)[
    'James',   'Mary',      'Modern',
    'James',   'Mary',      'Modern',
    'Robert',  'Mary',      'Modern',
    'Robert',  'Mary',      'Modern',
    'Michael', 'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'James',   'Patricia',  'Modern',
    'Robert',  'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'James',   'Linda',     'Modern',
    'James',   'Linda',     'Modern',
    'Robert',  'Linda',     'Modern',
    'Robert',  'Linda',     'Modern',
    'James',   'Linda',     'Modern',
    'Robert',  'Mary',      'Modern',
    'Michael', 'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'James',   'Linda',     'Modern',
    'Robert',  'Mary',      'Classic',
    'Robert',  'Linda',     'Classic',
    'James',   'Mary',      'Classic',
    'James',   'Linda',     'Classic'
];
dancePairs
| invoke pair_probabilities_fl('boy','girl', 'dance_class')

Saída

Vejamos a lista de pares de pessoas dançando em duas aulas de dança supostamente aleatórias para descobrir se algo parece anômalo (ou seja, não aleatório). Começaremos examinando cada classe por si só.

O par Michael-Patricia tem uma métrica de aumento de 2,375, que está significativamente acima de 1. Esse valor significa que eles são vistos juntos com muito mais frequência do que o que seria esperado se esse emparelhamento fosse aleatório. Seu coeficiente de Jaccard é 0,75, que é próximo de 1. Quando a dupla dança, eles preferem dançar juntos.

A B scope P_A P_B P_AB P_AUB P_AIB P_BIA Lift_AB Jaccard_AB
Robert Patricia Moderno 0.31578 0.42105 0.05263 0.68421 0.12499 0.16666 0.39583 0.07692
Robert Mary Moderno 0.31578 0.26315 0.15789 0.42105 0.59999 0.49999 1.89999 0.37499
Robert Linda Moderno 0.31578 0.31578 0.10526 0.52631 0.33333 0.33333 1.05555 0,2
Michael Patricia Moderno 0.31578 0.42105 0.31578 0.42105 0,75 0.99999 2.375 0,75
James Patricia Moderno 0.36842 0.42105 0.05263 0.73684 0.12499 0.14285 0.33928 0.07142
James Mary Moderno 0.36842 0.26315 0.10526 0.52631 0,4 0.28571 1.08571 0,2
James Linda Moderno 0.36842 0.31578 0.21052 0.47368 0.66666 0.57142 1.80952 0.44444
Robert Mary Clássico 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333
Robert Linda Clássico 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333
James Mary Clássico 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333
James Linda Clássico 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333