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=a 및 B=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 | ✔️ | A와 B의 확률이 각 범위 값에 대해 독립적으로 계산되도록 범위를 포함하는 필드입니다. |
함수 정의
다음과 같이 해당 코드를 쿼리 정의 함수로 포함하거나 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.
다음 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 |