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 |
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per