Share via


pair_probabilities_fl()

Calcolare varie probabilità e metriche correlate per una coppia di variabili categoriche.

La funzione è una funzione pair_probabilities_fl()definita dall'utente che calcola le probabilità e le metriche correlate seguenti per una coppia di variabili categoriche, A e B, come indicato di seguito:

  • P(A) è la probabilità di ogni valore A=a
  • P(B) è la probabilità di ogni valore B=b
  • P(A|B) è la probabilità condizionale di A=a dato B=b
  • P(B|A) è la probabilità condizionale di B=b dato A=a
  • P(A∪B) è la probabilità di unione (A=a o B=b)
  • P(A∩B) è la probabilità di intersezione (A=a e B=b)
  • La metrica di accuratezza viene calcolata come P(A∩B)/P(A)*P(B). Per altre informazioni, vedere Metrica di accuratezza.
    • Un lift near 1 indica che la probabilità congiunta di due valori è simile a quella prevista nel caso in cui entrambe le variabili siano indipendenti.
    • Lift >> 1 indica che i valori cooccur sono più spesso del previsto in base all'ipotesi di indipendenza.
    • Lift << 1 indica che i valori sono meno probabili per cooccur rispetto al previsto in base all'ipotesi di indipendenza.
  • Il coefficiente di somiglianza Jaccard viene calcolato come P(A∩B)/P(A∪B). Per altre informazioni, vedere Coefficiente di somiglianza jaccard.
    • Un coefficiente Jaccard elevato, vicino a 1, indica che i valori tendono a verificarsi insieme.
    • Un coefficiente Jaccard basso, vicino a 0, significa che i valori tendono a rimanere separati.

Sintassi

pair_probabilities_fl(A, B, Ambito)

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
A scalare ✔️ Prima variabile categorica.
B scalare ✔️ Seconda variabile categorica.
Ambito scalare ✔️ Il campo che contiene l'ambito, in modo che le probabilità per A e B vengano calcolate in modo indipendente per ogni valore di ambito.

Definizione di funzione

È possibile definire la funzione incorporando il codice come funzione definita da query o creandola come funzione archiviata nel database, come indicato di seguito:

Definire la funzione usando l'istruzione let seguente. Non sono necessarie autorizzazioni.

Importante

Un'istruzione let non può essere eseguita autonomamente. Deve essere seguita da un'istruzione di espressione tabulare. Per eseguire un esempio funzionante di pair_probabilities_fl(), vedere Esempio.

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.

Esempio

Nell'esempio seguente viene utilizzato l'operatore invoke per eseguire la funzione .

Per usare una funzione definita da query, richiamarla dopo la definizione della funzione incorporata.

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')

Output

Esaminiamo l'elenco di coppie di persone che ballano a due classi di danza presumibilmente casuali per scoprire se qualcosa sembra anomalo (ovvero non casuale). Si inizierà esaminando ogni classe da sola.

La coppia Michael-Patricia ha una metrica di accuratezza pari a 2,375, che è significativamente superiore a 1. Questo valore significa che vengono visti insieme molto più spesso che ciò che ci si aspetterebbe se questa associazione fosse casuale. Il coefficiente Jaccard è 0,75, che è vicino a 1. Quando la coppia balla, preferiscono ballare insieme.

Una B ambito P_A P_B P_AB P_AUB P_AIB P_BIA Lift_AB Jaccard_AB
Maria Teresa Patricia Moderna 0.31578 0.42105 0.05263 0.68421 0.12499 0.16666 0.39583 0.07692
Maria Teresa Mary Moderna 0.31578 0.26315 0.15789 0.42105 0.59999 0.49999 1.89999 0.37499
Maria Teresa Linda Moderna 0.31578 0.31578 0.10526 0.52631 0.33333 0.33333 1.05555 0,2
Michael Patricia Moderna 0.31578 0.42105 0.31578 0.42105 0,75 0.99999 2.375 0,75
Teresa Patricia Moderna 0.36842 0.42105 0.05263 0.73684 0.12499 0.14285 0.33928 0.07142
Teresa Mary Moderna 0.36842 0.26315 0.10526 0.52631 0,4 0.28571 1.08571 0,2
Teresa Linda Moderna 0.36842 0.31578 0.21052 0.47368 0.66666 0.57142 1.80952 0.44444
Maria Teresa Mary Classic 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333
Maria Teresa Linda Classic 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333
Teresa Mary Classic 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333
Teresa Linda Classic 0.49999 0.49999 0.24999 0,75 0.49999 0.49999 0.99999 0.33333