pair_probabilities_fl()
Bereken verschillende waarschijnlijkheden en gerelateerde metrische gegevens voor een paar categorische variabelen.
De functie pair_probabilities_fl()
is een UDF (door de gebruiker gedefinieerde functie) waarmee de volgende waarschijnlijkheden en gerelateerde metrische gegevens voor een paar categorische variabelen, A en B, als volgt worden berekend:
- P(A) is de kans van elke waarde A=a
- P(B) is de waarschijnlijkheid van elke waarde B=b
- P(A|B) is de voorwaardelijke waarschijnlijkheid van A=a gegeven B=b
- P(B|A) is de voorwaardelijke waarschijnlijkheid van B=b gegeven A=a
- P(A∪B) is de samenvoegingskans (A=a of B=b)
- P(A∩B) is de snijpuntkans (A=a en B=b)
- De liftwaarde wordt berekend als P(A∩B)/P(A)*P(B). Zie lift metric (Lift metric) voor meer informatie.
- Een lift in de buurt van 1 betekent dat de gezamenlijke waarschijnlijkheid van twee waarden vergelijkbaar is met wat wordt verwacht in het geval dat beide variabelen onafhankelijk zijn.
- Lift >> 1 betekent dat waarden vaker voorkomen dan verwacht onder de onafhankelijkheidsveronderstelling.
- Lift << 1 betekent dat waarden minder waarschijnlijk samenvallen dan verwacht onder de veronderstelling van onafhankelijkheid.
- De Jaccard-gelijkeniscoëfficiënt wordt berekend als P(A∩B)/P(A∪B). Zie Jaccard-gelijkeniscoëfficiënt voor meer informatie.
- Een hoge Jaccard-coëfficiënt, dicht bij 1, betekent dat de waarden vaak samen voorkomen.
- Een lage Jaccard-coëfficiënt, dicht bij 0, betekent dat de waarden vaak uit elkaar blijven.
Syntax
pair_probabilities_fl(
A, B, Bereik)
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
A | Scalaire | ✔️ | De eerste categorische variabele. |
B | Scalaire | ✔️ | De tweede categorische variabele. |
Scope | Scalaire | ✔️ | Het veld dat het bereik bevat, zodat de waarschijnlijkheden voor A en B onafhankelijk worden berekend voor elke bereikwaarde. |
Functiedefinitie
U kunt de functie definiëren door de code in te sluiten als een door een query gedefinieerde functie of door deze als volgt te maken als een opgeslagen functie in uw database:
Definieer de functie met behulp van de volgende let-instructie. Er zijn geen machtigingen vereist.
Belangrijk
Een let-instructie kan niet zelfstandig worden uitgevoerd. Deze moet worden gevolgd door een tabellaire expressie-instructie. Zie Voorbeeld als u een werkend voorbeeld van pair_probabilities_fl()
wilt uitvoeren.
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.
Voorbeeld
In het volgende voorbeeld wordt de operator aanroepen gebruikt om de functie uit te voeren.
Als u een door een query gedefinieerde functie wilt gebruiken, roept u deze aan na de definitie van de ingesloten functie.
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')
Uitvoer
Laten we eens kijken naar de lijst met paren van mensen die tijdens twee danslessen zogenaamd willekeurig dansen om erachter te komen of er iets afwijkend uitziet (wat betekent, niet willekeurig). We beginnen met het bekijken van elke klas op zichzelf.
Het Michael-Patricia paar heeft een liftmetriek van 2,375, wat aanzienlijk hoger is dan 1. Deze waarde betekent dat ze veel vaker samen worden gezien dan wat er zou worden verwacht als deze koppeling willekeurig was. Hun Jaccard-coëfficiënt is 0,75, wat dicht bij 1 ligt. Als het paar danst, dansen ze liever samen.
A | B | scope | P_A | P_B | P_AB | P_AUB | P_AIB | P_BIA | Lift_AB | Jaccard_AB |
---|---|---|---|---|---|---|---|---|---|---|
Robert | Patricia | Modern | 0.31578 | 0.42105 | 0.05263 | 0.68421 | 0.12499 | 0.16666 | 0.39583 | 0.07692 |
Robert | Mary | Modern | 0.31578 | 0.26315 | 0.15789 | 0.42105 | 0.59999 | 0.49999 | 1.89999 | 0.37499 |
Robert | Linda | Modern | 0.31578 | 0.31578 | 0.10526 | 0.52631 | 0.33333 | 0.33333 | 1.05555 | 0,2 |
Michael | Patricia | Modern | 0.31578 | 0.42105 | 0.31578 | 0.42105 | 0,75 | 0.99999 | 2.375 | 0,75 |
James | Patricia | Modern | 0.36842 | 0.42105 | 0.05263 | 0.73684 | 0.12499 | 0.14285 | 0.33928 | 0.07142 |
James | Mary | Modern | 0.36842 | 0.26315 | 0.10526 | 0.52631 | 0,4 | 0.28571 | 1.08571 | 0,2 |
James | Linda | Modern | 0.36842 | 0.31578 | 0.21052 | 0.47368 | 0.66666 | 0.57142 | 1.80952 | 0.44444 |
Robert | Mary | Klassiek | 0.49999 | 0.49999 | 0.24999 | 0,75 | 0.49999 | 0.49999 | 0.99999 | 0.33333 |
Robert | Linda | Klassiek | 0.49999 | 0.49999 | 0.24999 | 0,75 | 0.49999 | 0.49999 | 0.99999 | 0.33333 |
James | Mary | Klassiek | 0.49999 | 0.49999 | 0.24999 | 0,75 | 0.49999 | 0.49999 | 0.99999 | 0.33333 |
James | Linda | Klassiek | 0.49999 | 0.49999 | 0.24999 | 0,75 | 0.49999 | 0.49999 | 0.99999 | 0.33333 |
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor