다음을 통해 공유


pair_probabilities_fl()

범주 변수 쌍에 대한 다양한 확률 및 관련 메트릭을 계산합니다.

함수 pair_probabilities_fl() 는 다음과 같이 범주 변수 A와 B 쌍에 대해 다음과 같은 확률 및 관련 메트릭을 계산하는 UDF(사용자 정의 함수) 입니다.

  • P(A)는 각 값 A=a의 확률입니다.
  • P(B)는 각 값 B=b의 확률입니다.
  • P(A|B)는 A=a 지정된 B=b의 조건부 확률입니다.
  • P(B|A)는 A=a가 지정된 B=b의 조건부 확률입니다.
  • P(A∪B)는 공용 구조체 확률(A=a 또는 B=b)입니다.
  • P(A∩B)는 교차 확률(A=aB=b)입니다.
  • 리프트 메트릭은 P(A∩B)/P(A)*P(B)로 계산됩니다. 자세한 내용은 리프트 메트릭을 참조하세요.
    • 1에 가까운 리프트는 두 값의 공동 확률이 두 변수가 독립적인 경우 예상되는 확률과 비슷하다는 것을 의미합니다.
    • 리프트 >> 1은 독립성 가정 하에 값이 예상보다 더 자주 발생한다는 것을 의미합니다.
    • 리프트 << 1은 독립성 가정 하에 값이 예상보다 덜 동조할 가능성이 낮다는 것을 의미합니다.
  • Jaccard 유사성 계수는 P(A∩B)/P(A∪B)로 계산됩니다. 자세한 내용은 Jaccard 유사성 계수를 참조하세요.
    • 1에 가까운 높은 자카드 계수는 값이 함께 발생하는 경향이 있음을 의미합니다.
    • 0에 가까운 낮은 자카드 계수는 값이 떨어져 있는 경향이 있음을 의미합니다.

Syntax

pair_probabilities_fl(A, B, 범위)

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

이름 형식 필수 Description
A 스칼라(scalar) ✔️ 첫 번째 범주 변수입니다.
B 스칼라(scalar) ✔️ 두 번째 범주 변수입니다.
범위 스칼라(scalar) ✔️ AB의 확률이 각 scope 값에 대해 독립적으로 계산되도록 scope 포함하는 필드입니다.

함수 정의

코드를 쿼리 정의 함수로 포함하거나 다음과 같이 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.

다음 let 문을 사용하여 함수를 정의합니다. 사용 권한이 필요 없습니다.

중요

let 문은 자체적으로 실행할 수 없습니다. 테이블 형식 식 문 뒤에 이어서야 합니다. 의 작업 예제를 실행하려면 예제 pair_probabilities_fl()를 참조 하세요.

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.

예제

다음 예제에서는 invoke 연산자를 사용하여 함수를 실행합니다.

쿼리 정의 함수를 사용하려면 포함된 함수 정의 다음에 호출합니다.

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

출력

무작위로 두 개의 댄스 클래스에서 춤을 추는 사람들의 목록을 살펴보고 이상한 것이 있는지 알아보겠습니다 (즉, 무작위가 아님). 먼저 각 클래스를 직접 살펴보겠습니다.

Michael-Patricia 쌍의 리프트 메트릭 은 2.375로 1보다 훨씬 높습니다. 이 값은 이 페어링이 임의인 경우 예상되는 것을 훨씬 더 자주 함께 볼 수 있음을 의미합니다. 자카드 계수는 0.75이며 1에 가깝습니다. 두 사람이 춤을 추면 함께 춤을 추는 것을 선호합니다.

A b scope P_A P_B P_AB P_AUB P_AIB P_BIA Lift_AB Jaccard_AB
Robert 패트리 샤 최신 0.31578 0.42105 0.05263 0.68421 0.12499 0.16666 0.39583 0.07692
Robert Mary 최신 0.31578 0.26315 0.15789 0.42105 0.59999 0.49999 1.89999 0.37499
Robert Linda 최신 0.31578 0.31578 0.10526 0.52631 0.33333 0.33333 1.05555 0.2
Michael 패트리 샤 최신 0.31578 0.42105 0.31578 0.42105 0.75 0.99999 2.375 0.75
James 패트리 샤 최신 0.36842 0.42105 0.05263 0.73684 0.12499 0.14285 0.33928 0.07142
James Mary 최신 0.36842 0.26315 0.10526 0.52631 0.4 0.28571 1.08571 0.2
James Linda 최신 0.36842 0.31578 0.21052 0.47368 0.66666 0.57142 1.80952 0.44444
Robert Mary 클래식 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333
Robert Linda 클래식 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333
James Mary 클래식 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333
James Linda 클래식 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333