Udostępnij za pośrednictwem


pair_probabilities_fl()

Oblicz różne prawdopodobieństwa i powiązane metryki dla pary zmiennych kategorii.

Funkcja pair_probabilities_fl() jest funkcją UDF (zdefiniowaną przez użytkownika), która oblicza następujące prawdopodobieństwa i powiązane metryki dla pary zmiennych kategorii, A i B, w następujący sposób:

  • P(A) to prawdopodobieństwo każdej wartości A=a
  • P(B) to prawdopodobieństwo każdej wartości B=b
  • P(A|B) to prawdopodobieństwo warunkowe A=a danego B=b
  • P(B|A) to prawdopodobieństwo warunkowe B=b podane A=a
  • P(A∪B) to prawdopodobieństwo unii (A=a lub B=b)
  • P(A∩B) to prawdopodobieństwo skrzyżowania (A=a i B=b)
  • Metryka lift jest obliczana jako P(A∩B)/P(A)*P(B). Aby uzyskać więcej informacji, zobacz lift metryka.
    • Lift w pobliżu 1 oznacza, że wspólne prawdopodobieństwo dwóch wartości jest podobne do oczekiwanego w przypadku, gdy obie zmienne są niezależne.
    • Lift >> 1 oznacza, że wartości częściej niż oczekiwano w ramach założenia niepodległości.
    • Lift << 1 oznacza, że wartości są mniej prawdopodobne, aby współistnieć niż oczekiwano w ramach założenia niepodległości.
  • Współczynnik podobieństwa Jaccard jest obliczany jako P(A∩B)/P(A∪B). Aby uzyskać więcej informacji, zobacz Współczynnik podobieństwa Jaccard.
    • Wysoki współczynnik Jaccard, zbliżony do 1, oznacza, że wartości zwykle występują razem.
    • Niski współczynnik Jaccard, zbliżony do 0, oznacza, że wartości zwykle pozostają od siebie.

Składnia

pair_probabilities_fl(A, B, Zakres)

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
A Wartość skalarna ✔️ Pierwsza zmienna kategoryczna.
B Wartość skalarna ✔️ Druga zmienna kategoryczna.
Zakres Wartość skalarna ✔️ Pole zawierające zakres, dzięki czemu prawdopodobieństwo dla wartości A i B jest obliczane niezależnie dla każdej wartości zakresu.

Definicja funkcji

Funkcję można zdefiniować, osadzając kod jako funkcję zdefiniowaną przez zapytanie lub tworząc ją jako funkcję przechowywaną w bazie danych w następujący sposób:

Zdefiniuj funkcję przy użyciu następującej instrukcji let. Nie są wymagane żadne uprawnienia.

Ważne

Instrukcja let nie może być uruchamiana samodzielnie. Należy po nim wykonać instrukcję wyrażenia tabelarycznego. Aby uruchomić działający przykład programu pair_probabilities_fl(), zobacz Przykład.

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.

Przykład

W poniższym przykładzie użyto operatora invoke do uruchomienia funkcji.

Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po osadzonej definicji funkcji.

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

Dane wyjściowe

Przyjrzyjmy się liście par ludzi tańczących na dwóch zajęciach tanecznych rzekomo losowo, aby dowiedzieć się, czy coś wygląda nietypowo (co oznacza, nie losowe). Zaczniemy od przyjrzenia się każdej klasie samodzielnie.

Para Michael-Patricia ma metrykę lift 2,375, która jest znacznie powyżej 1. Ta wartość oznacza, że są one postrzegane razem znacznie częściej, że to, czego można się spodziewać, jeśli ta para była losowa. Ich współczynnik Jaccard wynosi 0,75, który jest zbliżony do 1. Kiedy para tańczy, wolą tańczyć razem.

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