다음을 통해 공유


pair_probabilities_fl()

적용 대상: ✅Microsoft Fabric✅Azure Data Explorer

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

이 함수 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에 가까우면 값이 떨어져 있는 경향이 있음을 의미합니다.

구문

pair_probabilities_fl(A, B, 범위)

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

매개 변수

이름 Type 필수 설명
A scalar ✔️ 첫 번째 범주 변수입니다.
B scalar ✔️ 두 번째 범주 변수입니다.
범위 scalar ✔️ AB의 확률이 각 범위 값에 대해 독립적으로 계산되도록 범위를 포함하는 필드입니다.

함수 정의

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

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

Important

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.

예시

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

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

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

출력

무작위로 두 개의 댄스 클래스에서 춤을 추는 사람들의 쌍 목록을 살펴보고 비정상적인 것 (즉, 무작위가 아님)을 알아 봅시다. 먼저 각 클래스를 단독으로 살펴보겠습니다.

마이클-패트리샤 쌍의 리프트 메트릭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
준호 패트리 샤 최신 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