@1aboveio/skills 1.0.10 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/.codex-plugin/resources.json +297 -216
- package/README.md +3 -3
- package/package.json +10 -8
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-foundation/SKILL.md +35 -37
- package/skills/app-dev/android-foundation/references/delivery-focus.md +4 -2
- package/skills/app-dev/android-foundation/references/feature-work.md +50 -0
- package/skills/app-dev/android-foundation/references/setup.md +24 -9
- package/skills/app-dev/android-foundation/references/workspace.md +81 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
- package/skills/app-dev/android-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/app-dev/app-debug/SKILL.md +1 -1
- package/skills/app-dev/better-auth/SKILL.md +1 -1
- package/skills/app-dev/data-catalog/SKILL.md +1 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/SKILL.md +15 -10
- package/skills/app-dev/ios-foundation/references/setup.md +25 -9
- package/skills/app-dev/ios-foundation/references/workspace.md +82 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
- package/skills/app-dev/ios-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/app-dev/monorepo/SKILL.md +1 -1
- package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
- package/skills/app-dev/prisma-setup/SKILL.md +1 -1
- package/skills/app-dev/pyspark/SKILL.md +1 -1
- package/skills/app-dev/python-backend/SKILL.md +1 -1
- package/skills/app-dev/shadcn/SKILL.md +1 -1
- package/skills/app-dev/zod-v4/SKILL.md +1 -1
- package/skills/cicd/cloud-build/SKILL.md +1 -1
- package/skills/cicd/cloud-debug/SKILL.md +1 -1
- package/skills/cicd/cloud-deploy/SKILL.md +1 -1
- package/skills/cicd/docker/SKILL.md +1 -1
- package/skills/cicd/github-actions/SKILL.md +1 -1
- package/skills/cicd/github-flow/SKILL.md +1 -1
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/mergify/SKILL.md +1 -1
- package/skills/cicd/podman/SKILL.md +1 -1
- package/skills/content/article-review/SKILL.md +1 -1
- package/skills/content/article-to-image/SKILL.md +1 -1
- package/skills/content/flowchart-svg/SKILL.md +1 -1
- package/skills/content/image-gen/SKILL.md +1 -1
- package/skills/content/mermaid/SKILL.md +1 -1
- package/skills/content/wechat-article-writer/SKILL.md +1 -1
- package/skills/content/wechat-publisher/SKILL.md +1 -1
- package/skills/content/wechat-search/SKILL.md +1 -1
- package/skills/content/xai-search/SKILL.md +1 -1
- package/skills/core/distill-writing/SKILL.md +3 -3
- package/skills/core/distill-writing/references/extraction.md +1 -1
- package/skills/core/doc-to-md/SKILL.md +1 -1
- package/skills/core/editorial-review/SKILL.md +82 -12
- package/skills/core/editorial-review/references/checklist.md +26 -1
- package/skills/core/house-style/SKILL.md +8 -3
- package/skills/core/house-style/references/analytical-reporting.md +123 -0
- package/skills/core/house-style/references/analytical-writing-patterns.md +79 -0
- package/skills/core/house-style/references/analytical-writing-research.md +129 -0
- package/skills/core/{write-doc → house-style}/references/bilingual.md +7 -5
- package/skills/core/house-style/references/definitions-and-metrics.md +86 -0
- package/skills/core/house-style/references/document-workflow.md +193 -0
- package/skills/core/house-style/references/initialization.md +66 -0
- package/skills/core/house-style/references/persistence.md +9 -4
- package/skills/core/house-style/references/rules.md +11 -4
- package/skills/core/house-style/scripts/init-guidance.mjs +213 -0
- package/skills/core/house-style/templates/analytical-report.md +54 -0
- package/skills/core/house-style/templates/gap-analysis.md +1 -1
- package/skills/core/plain-language/SKILL.md +2 -2
- package/skills/core/polish-cn/SKILL.md +9 -2
- package/skills/core/reg-parser/SKILL.md +3 -3
- package/skills/core/terminology/SKILL.md +8 -4
- package/skills/core/write-doc/SKILL.md +40 -151
- package/skills/core/write-report/SKILL.md +129 -0
- package/skills/core/{write-doc → write-report}/references/compliance-reports.md +4 -4
- package/skills/engineering/better-review/SKILL.md +37 -37
- package/skills/engineering/better-review/references/passes.md +35 -41
- package/skills/engineering/better-review/references/result.md +10 -9
- package/skills/engineering/e2e-test/SKILL.md +17 -17
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +11 -13
- package/skills/engineering/e2e-test/references/presentation-sweep.md +7 -7
- package/skills/engineering/e2e-test/references/reviewing.md +9 -11
- package/skills/engineering/e2e-test/references/route-manifest.md +1 -1
- package/skills/engineering/engineering/SKILL.md +124 -0
- package/skills/engineering/engineering/references/engineering-conventions.md +32 -0
- package/skills/engineering/engineering/references/feature-delivery.md +8 -0
- package/skills/engineering/engineering/references/init-scope.md +37 -0
- package/skills/engineering/engineering/scripts/init.mjs +160 -0
- package/skills/engineering/{contributing → engineering}/scripts/persist-conventions.mjs +1 -1
- package/skills/engineering/engineering-runtime/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +19 -19
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
- package/skills/engineering/ensure-coverage/SKILL.md +22 -109
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +7 -5
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +4 -4
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +3 -3
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +4 -65
- package/skills/engineering/ensure-coverage/references/depth/grading.md +5 -7
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +6 -12
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +1 -1
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +6 -6
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +7 -23
- package/skills/engineering/ensure-coverage/references/process/output-template.md +18 -133
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +7 -12
- package/skills/engineering/ensure-coverage/scripts/README.md +12 -4
- package/skills/engineering/golden-path/SKILL.md +1 -1
- package/skills/engineering/harness-runtime/SKILL.md +3 -1
- package/skills/engineering/harness-runtime/bin/workspaces.mjs +52 -0
- package/skills/engineering/harness-runtime/native-workspace.mjs +239 -0
- package/skills/engineering/harness-runtime/references/workspaces.md +78 -0
- package/skills/engineering/harness-runtime/workspace-lifecycle.mjs +2154 -0
- package/skills/engineering/resolve-issues/SKILL.md +40 -61
- package/skills/engineering/resolve-issues/references/ci.md +13 -3
- package/skills/engineering/resolve-issues/references/delivery-progress.md +4 -3
- package/skills/engineering/resolve-issues/references/done.md +11 -2
- package/skills/engineering/resolve-issues/references/expire.md +9 -2
- package/skills/engineering/resolve-issues/references/implementation.md +33 -17
- package/skills/engineering/resolve-issues/references/preflight.md +3 -1
- package/skills/engineering/resolve-issues/references/principles.md +52 -0
- package/skills/engineering/resolve-issues/references/review.md +25 -15
- package/skills/engineering/resolve-issues/references/task-plan.md +64 -27
- package/skills/engineering/resolve-issues/references/workspaces.md +164 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +185 -317
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +44 -7
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +36 -2
- package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +9 -8
- package/skills/engineering/resolve-issues/scripts/workspace-lifecycle.mjs +1 -0
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- package/skills/engineering/rush-issues/SKILL.md +7 -5
- package/skills/engineering/rush-release/SKILL.md +1 -1
- package/skills/engineering/test-quality/SKILL.md +19 -4
- package/skills/engineering/test-quality/references/lint.md +1 -1
- package/skills/engineering/test-quality/references/principles.md +2 -2
- package/skills/engineering/test-quality/references/testing-conventions.md +1 -1
- package/skills/risk-compliance/compliance-audit/SKILL.md +4 -8
- package/skills/risk-compliance/compliance-audit/references/audience-and-reports.md +12 -0
- package/skills/risk-compliance/contract-compare/SKILL.md +17 -1
- package/skills/risk-compliance/contract-review/SKILL.md +6 -1
- package/skills/risk-compliance/contract-review/references/report-stage.md +17 -0
- package/skills/risk-compliance/doc-authenticity/SKILL.md +11 -1
- package/skills/risk-compliance/fraud-detection/LICENSE +3 -0
- package/skills/risk-compliance/fraud-detection/SKILL.md +148 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/first-party-fraud.md +3 -2
- package/skills/risk-compliance/fraud-detection/references/archetypes/third-party-fraud.md +47 -0
- package/skills/risk-compliance/fraud-detection/references/collection-payout-features.md +151 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/contexts/bank-transfer.md +4 -3
- package/skills/risk-compliance/fraud-detection/references/contexts/card-payment.md +70 -0
- package/skills/risk-compliance/fraud-detection/references/contexts/payment-collection.md +34 -0
- package/skills/risk-compliance/fraud-detection/references/contexts/payout.md +34 -0
- package/skills/risk-compliance/fraud-detection/references/enrichment.md +74 -0
- package/skills/risk-compliance/fraud-detection/references/entities.md +48 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/feature-engineering.md +69 -33
- package/skills/risk-compliance/fraud-detection/references/feature-sql.md +150 -0
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-rationale.md +4 -2
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-template.md +45 -23
- package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/review-checklist.md +60 -20
- package/skills/risk-compliance/fraud-detection/references/workflow.md +216 -0
- package/skills/risk-compliance/fraud-detection/release-check.mjs +95 -0
- package/skills/risk-compliance/payment-analysis/SKILL.md +36 -17
- package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +2 -2
- package/skills/risk-compliance/payment-analysis/references/report-template.md +10 -2
- package/skills/risk-compliance/payment-analysis/references/visualization.md +11 -1
- package/skills/risk-compliance/portfolio-payment-analysis/LICENSE +3 -0
- package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +170 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/identity-and-reconciliation.md +46 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/metrics-and-reporting.md +170 -0
- package/skills/risk-compliance/portfolio-payment-analysis/references/risk-history.md +89 -0
- package/skills/risk-compliance/portfolio-payment-analysis/release-check.mjs +95 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/analyze.py +636 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/build_report.py +386 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/comparison_charts.py +425 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/csv_export.py +52 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/render.py +160 -0
- package/skills/risk-compliance/portfolio-payment-analysis/scripts/risk_history.py +435 -0
- package/skills/risk-compliance/similar-domain/SKILL.md +9 -4
- package/skills/risk-compliance/tld-detection/SKILL.md +124 -239
- package/skills/risk-compliance/tld-detection/agents/openai.yaml +1 -1
- package/skills/risk-compliance/tld-detection/references/clean.md +18 -51
- package/skills/risk-compliance/tld-detection/references/fx-conversion.md +56 -219
- package/skills/risk-compliance/tld-detection/references/metric-contract.md +109 -0
- package/skills/risk-compliance/tld-detection/references/pattern.md +99 -0
- package/skills/risk-compliance/tld-detection/references/report-template.md +49 -272
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +46 -13
- package/skills/risk-compliance/tld-detection/scripts/detect_patterns.py +346 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +51 -19
- package/skills/risk-compliance/tld-detection/scripts/profile_groups.py +109 -0
- package/skills/risk-compliance/tld-detection/scripts/render_charts.py +218 -0
- package/skills/risk-compliance/tld-detection/scripts/tld_common.py +243 -0
- package/skills/engineering/contributing/SKILL.md +0 -70
- package/skills/risk-compliance/fraud-analysis/SKILL.md +0 -114
- package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +0 -27
- package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +0 -30
- package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +0 -20
- package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +0 -20
- package/skills/risk-compliance/fraud-analysis/references/workflow.md +0 -175
- package/skills/risk-compliance/tld-detection/references/chinese-polish.md +0 -55
- package/skills/risk-compliance/tld-detection/references/clustering.md +0 -235
- package/skills/risk-compliance/tld-detection/references/decision.md +0 -189
- package/skills/risk-compliance/tld-detection/references/streams.md +0 -141
- package/skills/risk-compliance/tld-detection/references/terminology.md +0 -95
- package/skills/risk-compliance/tld-detection/references/workflow.md +0 -95
- /package/skills/{engineering/contributing → core/write-report}/LICENSE +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/audit-report-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/external-assessment-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/management-report-template.md +0 -0
- /package/skills/core/{write-doc → write-report}/references/reports/vars-report-template.md +0 -0
- /package/skills/{engineering/contributing → core/write-report}/release-check.mjs +0 -0
- /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/LICENSE +0 -0
- /package/skills/engineering/{contributing → engineering}/references/tracker-conventions.md +0 -0
- /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/release-check.mjs +0 -0
- /package/skills/engineering/{contributing → engineering}/scripts/persist-conventions-core.mjs +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/authorized-payment-scam.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/mechanisms/account-takeover.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/taxonomy.md +0 -0
- /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/terminology.md +0 -0
package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/feature-engineering.md
RENAMED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
# Shared feature engineering
|
|
2
2
|
|
|
3
|
-
Read this
|
|
4
|
-
and
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
The goal is a small set of interpretable, decision-time-valid inputs that can
|
|
9
|
-
become rules. Build thresholds, lists, rates, and graph artifacts on train only.
|
|
3
|
+
Read this after pre-flight and selection of the analysis profile and packs.
|
|
4
|
+
Choose interpretable features supported by the data and decision workflow; the
|
|
5
|
+
catalogs are candidates, not a required feature grid. Rapid rule discovery on
|
|
6
|
+
recent data is acceptable without a mandatory split. Label same-sample selection
|
|
7
|
+
and evaluation as exploratory, not independent performance.
|
|
10
8
|
|
|
11
9
|
## 1. Declare grain and decision point
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
Real-time scoring evaluates one transaction at its decision point. Current
|
|
12
|
+
transaction attributes and transaction-triggered velocity include that transaction.
|
|
13
|
+
History contains only records available at that decision. Other journey events
|
|
14
|
+
supply prior context, not alternative real-time scoring units. A post-transaction entity or period
|
|
15
|
+
review is separate; completed-period aggregates are not available at an earlier
|
|
16
|
+
decision.
|
|
16
17
|
|
|
17
18
|
A feature is usable only if its value existed at that decision point in the live
|
|
18
19
|
workflow. Correlation with the eventual label is insufficient.
|
|
@@ -54,28 +55,57 @@ Use only families supported by the selected packs and source data:
|
|
|
54
55
|
- Current-event attributes: amount, currency, channel, product, state available
|
|
55
56
|
at decision time
|
|
56
57
|
- Entity history: customer, account, instrument, beneficiary, device, session,
|
|
57
|
-
IP, email, phone, merchant, or counterparty
|
|
58
|
-
- Velocity:
|
|
59
|
-
operational windows
|
|
58
|
+
IP, email, phone, company, person, bank account, address, merchant, or counterparty
|
|
59
|
+
- Velocity: counts, amounts, distinct entities, and elapsed time over
|
|
60
|
+
operational windows, including the current transaction. For counterparty
|
|
61
|
+
velocity, declare direction, entity type, and pair versus entity grouping;
|
|
62
|
+
never mix company counts with bank-account counts.
|
|
60
63
|
- Novelty and deviation: new entity, behavior unlike the entity's prior history,
|
|
61
64
|
amount relative to prior behavior
|
|
62
65
|
- Sequences: explicit prior-event patterns across the money or access journey
|
|
66
|
+
- Fund lots: stateful allocation of available incoming funds to the current
|
|
67
|
+
outgoing transaction; FIFO is the default for collection/payout analysis.
|
|
68
|
+
Preview the current debit against pre-debit state, not a completed payout
|
|
69
|
+
outcome. Domain rules and conservation checks are in
|
|
70
|
+
[collection/payout features](collection-payout-features.md).
|
|
63
71
|
- Networks: fan-in, fan-out, shared identifiers, clusters, and risky-neighbor
|
|
64
72
|
evidence from a point-in-time graph
|
|
65
|
-
-
|
|
73
|
+
- Lists: entities or segments with sufficient support and elevated rate, using
|
|
74
|
+
only outcomes available at the decision when deployed
|
|
66
75
|
|
|
67
76
|
## 4. Point-in-time history
|
|
68
77
|
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
- Use event times in (t − window, t], including the current transaction, and
|
|
79
|
+
only records available at decision time. Equal timestamps need a deterministic
|
|
80
|
+
known arrival order. A later arrival is not history even if its event time is earlier.
|
|
81
|
+
- Holdout rows, if used, may use history available at their decision.
|
|
72
82
|
- Never use the current row's outcome in its own features.
|
|
73
83
|
- Graph nodes, edges, labels, and aggregates must be snapshots as of the event.
|
|
74
84
|
- Outcome labels become historical evidence only after they would have been known
|
|
75
85
|
operationally, not merely after the underlying transaction occurred.
|
|
76
86
|
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
Standard elapsed windows are 1m, 5m, 15m, 30m, 1h, 2h, 6h, 24h, 2d,
|
|
88
|
+
7d, 14d, 21d and 30d; a day is 86,400 seconds, not a calendar day.
|
|
89
|
+
Standard names are `<entity>_txn_count_<window>`,
|
|
90
|
+
`<entity>_amount_sum_<window>`, and `<entity>_<other_entity>_distinct_count_<window>`.
|
|
91
|
+
For example: `email_txn_count_5m`, `pan_amount_sum_24h`, and
|
|
92
|
+
`email_pan_distinct_count_7d`. Keep `24h` canonical, not `1d`. A nonstandard
|
|
93
|
+
window needs an explicit operational reason; do not generate all combinations.
|
|
94
|
+
|
|
95
|
+
For mismatch, compare normalized like-for-like attributes; missing inputs return
|
|
96
|
+
unknown. For frequency encoding, define the reference population, count versus
|
|
97
|
+
share, reference period/version, null/unseen behavior, and availability. A frozen
|
|
98
|
+
historical frequency encoding differs from a rolling count. Neither may use
|
|
99
|
+
future observations. See [feature SQL](feature-sql.md) for both patterns.
|
|
100
|
+
|
|
101
|
+
For every shortlisted feature record its formula, inputs, entity key, window,
|
|
102
|
+
null behavior, currency, source/version, and update semantics. Replay cold starts,
|
|
103
|
+
limited lookback, late arrivals, duplicate delivery, and timestamp ties. Missing
|
|
104
|
+
history is not proof of zero prior activity.
|
|
105
|
+
|
|
106
|
+
See [feature SQL](feature-sql.md), [entities](entities.md), and
|
|
107
|
+
[enrichment](enrichment.md). Avoid sequences and fine windows selected only
|
|
108
|
+
because they maximize sample fit.
|
|
79
109
|
|
|
80
110
|
## 5. Identity-link quality
|
|
81
111
|
|
|
@@ -103,21 +133,26 @@ account restrictions often mature after the event.
|
|
|
103
133
|
value exists. State this assumption and preserve those explicit states as
|
|
104
134
|
unlabeled.
|
|
105
135
|
- For a user-defined positive condition, require a separate user-defined
|
|
106
|
-
negative condition
|
|
107
|
-
|
|
136
|
+
negative condition before computing metrics that need negatives. Discovery
|
|
137
|
+
continues with remaining rows unlabeled. Rows outside the positive condition
|
|
138
|
+
are not automatically negative.
|
|
108
139
|
- Verify positive and negative conditions are disjoint. Exclude rows matching
|
|
109
140
|
neither or both from supervised metrics and report their count.
|
|
110
|
-
-
|
|
141
|
+
- Use only outcomes mature and available before each decision in deployed
|
|
142
|
+
label-rate lists or encodings; never use current or future outcomes.
|
|
111
143
|
- Do not use an operational action as both label and feature.
|
|
112
144
|
- Do not blend separate archetypes into a single positive label.
|
|
113
145
|
|
|
114
|
-
## 7.
|
|
146
|
+
## 7. Discovery and optional validation
|
|
115
147
|
|
|
116
|
-
- Propose thresholds from business meaning or
|
|
117
|
-
- Require
|
|
118
|
-
-
|
|
119
|
-
|
|
120
|
-
-
|
|
148
|
+
- Propose thresholds from business meaning or observed distributions.
|
|
149
|
+
- Require appropriate support for entity, graph, or segment lists.
|
|
150
|
+
- If using a holdout, freeze conditions and memberships before holdout scoring;
|
|
151
|
+
apply them without reranking on holdout outcomes.
|
|
152
|
+
- If the same sample selects and evaluates rules, label results same-sample and
|
|
153
|
+
exploratory. Optional temporal or other validation can measure generalization.
|
|
154
|
+
- Small-N spikes remain monitoring candidates. Discovery choices never relax
|
|
155
|
+
decision-time availability of encoding sources.
|
|
121
156
|
|
|
122
157
|
## 8. Rule-ready conditions
|
|
123
158
|
|
|
@@ -130,9 +165,9 @@ event grain + decision point + fields + operator + threshold/list + units + wind
|
|
|
130
165
|
Prefer:
|
|
131
166
|
|
|
132
167
|
- `amount >= <currency threshold>` over “high amount”
|
|
133
|
-
- `
|
|
168
|
+
- `attempts_including_current_1h >= 3` over “high velocity”
|
|
134
169
|
- `beneficiary_age_minutes <= 30` over “new beneficiary”
|
|
135
|
-
- `entity in
|
|
170
|
+
- `entity in decision_time_watchlist_v1` with its availability documented
|
|
136
171
|
|
|
137
172
|
## 9. Universal do-not list
|
|
138
173
|
|
|
@@ -140,7 +175,7 @@ Prefer:
|
|
|
140
175
|
- Do not use future events, current outcomes, or investigation results.
|
|
141
176
|
- Do not treat technical authentication as proof of customer consent.
|
|
142
177
|
- Do not infer victim, perpetrator, mule, or facilitator role from behavior alone.
|
|
143
|
-
- Do not
|
|
178
|
+
- Do not rerank on holdout outcomes when reporting holdout performance.
|
|
144
179
|
- Do not present proxy labels as confirmed fraud or loss avoided.
|
|
145
180
|
- Do not invent missing fields, identity links, currencies, or event semantics.
|
|
146
181
|
|
|
@@ -149,10 +184,11 @@ Prefer:
|
|
|
149
184
|
- [ ] Analysis profile loaded
|
|
150
185
|
- [ ] Event grain and decision point stated
|
|
151
186
|
- [ ] Outcome maturity defined
|
|
152
|
-
- [ ] Label provenance and positive/negative/unlabeled definitions recorded
|
|
187
|
+
- [ ] Label provenance and known positive/negative/unlabeled definitions recorded;
|
|
188
|
+
unavailable classes limit metrics, not discovery
|
|
153
189
|
- [ ] Positive and negative conditions are disjoint
|
|
154
190
|
- [ ] Fields classified into allowed/excluded/context-only lists
|
|
155
191
|
- [ ] History and graph features are point-in-time
|
|
156
192
|
- [ ] Identity-link strength documented
|
|
157
|
-
- [ ]
|
|
193
|
+
- [ ] Same-sample results labeled; any holdout artifacts frozen before evaluation
|
|
158
194
|
- [ ] Candidates expressed as operable conditions
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Decision-time feature SQL
|
|
2
|
+
|
|
3
|
+
This PostgreSQL reference demonstrates semantics, not a production implementation
|
|
4
|
+
or performance recommendation. It scores each transaction independently. Assume
|
|
5
|
+
`transactions` has one immutable decision-time snapshot per transaction with:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
id bigint primary key, event_time timestamptz not null,
|
|
9
|
+
arrival_seq bigint unique not null, email text, pan text,
|
|
10
|
+
amount numeric, currency text, bin_country text, ip_country text
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The sequence is a globally unique, monotonically assigned decision-availability
|
|
14
|
+
order; a row and its attributes are available by its own sequence. It must reflect
|
|
15
|
+
what the scorer actually knew, not a sequence assigned retrospectively in event
|
|
16
|
+
time. Corrections, late enrichments and delayed outcomes need separate versioned
|
|
17
|
+
availability data; this snapshot alone cannot reconstruct them. Keys and country
|
|
18
|
+
codes are already normalized, with empty/invalid values converted to null. The
|
|
19
|
+
query uses a 1-hour elapsed window; substitute any standard window in
|
|
20
|
+
[feature engineering](feature-engineering.md), with days as 86,400 seconds.
|
|
21
|
+
|
|
22
|
+
The lateral query is authoritative for eligibility: event time is strictly above
|
|
23
|
+
the lower bound and at or below current event time, and availability sequence is
|
|
24
|
+
at or below the current sequence. Thus the current row is included, equal-time
|
|
25
|
+
later arrivals are excluded, and an earlier event arriving later is excluded.
|
|
26
|
+
Email transaction count includes current; distinct PAN excludes null.
|
|
27
|
+
The PAN amount sum uses the current currency only, but is unknown if the current
|
|
28
|
+
currency is unknown or any eligible PAN event has unknown currency or an unknown
|
|
29
|
+
amount in that currency. Known other currencies are not added. This conservative
|
|
30
|
+
rule avoids treating missing amounts or currencies as zero. Null entity keys return
|
|
31
|
+
null features rather than pooling unrelated records. Country mismatch is null when
|
|
32
|
+
either country is unknown. These features use no outcome labels.
|
|
33
|
+
|
|
34
|
+
```sql
|
|
35
|
+
SELECT c.id,
|
|
36
|
+
CASE WHEN c.email IS NULL THEN NULL ELSE e.email_txn_count_1h END AS email_txn_count_1h,
|
|
37
|
+
CASE WHEN c.email IS NULL THEN NULL ELSE e.email_pan_distinct_count_1h END AS email_pan_distinct_count_1h,
|
|
38
|
+
CASE WHEN c.pan IS NULL THEN NULL ELSE p.pan_txn_count_1h END AS pan_txn_count_1h,
|
|
39
|
+
CASE WHEN c.pan IS NULL OR c.currency IS NULL
|
|
40
|
+
OR p.unknown_currency_count > 0 OR p.missing_amount_count > 0
|
|
41
|
+
THEN NULL ELSE p.same_currency_sum END AS pan_amount_sum_1h,
|
|
42
|
+
CASE WHEN c.bin_country IS NULL OR c.ip_country IS NULL THEN NULL
|
|
43
|
+
ELSE c.bin_country <> c.ip_country END AS bin_ip_country_mismatch
|
|
44
|
+
FROM transactions AS c
|
|
45
|
+
LEFT JOIN LATERAL (
|
|
46
|
+
SELECT count(*) AS email_txn_count_1h,
|
|
47
|
+
count(DISTINCT h.pan) AS email_pan_distinct_count_1h
|
|
48
|
+
FROM transactions AS h
|
|
49
|
+
WHERE c.email IS NOT NULL AND h.email = c.email
|
|
50
|
+
AND h.event_time > c.event_time - interval '3600 seconds'
|
|
51
|
+
AND h.event_time <= c.event_time
|
|
52
|
+
AND h.arrival_seq <= c.arrival_seq
|
|
53
|
+
) AS e ON true
|
|
54
|
+
LEFT JOIN LATERAL (
|
|
55
|
+
SELECT count(*) AS pan_txn_count_1h,
|
|
56
|
+
count(*) FILTER (WHERE h.currency IS NULL) AS unknown_currency_count,
|
|
57
|
+
count(*) FILTER (WHERE h.currency = c.currency AND h.amount IS NULL) AS missing_amount_count,
|
|
58
|
+
sum(h.amount) FILTER (WHERE h.currency = c.currency) AS same_currency_sum
|
|
59
|
+
FROM transactions AS h
|
|
60
|
+
WHERE c.pan IS NOT NULL AND h.pan = c.pan
|
|
61
|
+
AND h.event_time > c.event_time - interval '3600 seconds'
|
|
62
|
+
AND h.event_time <= c.event_time
|
|
63
|
+
AND h.arrival_seq <= c.arrival_seq
|
|
64
|
+
) AS p ON true
|
|
65
|
+
ORDER BY c.id;
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
For a same-PAN, amount and currency retry count, require all three current values
|
|
69
|
+
to be non-null and add equality predicates on all three to the same lateral
|
|
70
|
+
eligibility conditions. A missing value yields unknown, not a match. For historical
|
|
71
|
+
label-rate encodings, the outcome itself needs an availability sequence no later
|
|
72
|
+
than the current decision and must be mature; exclude the current outcome. Do not
|
|
73
|
+
use today's known fraud list as though it existed at earlier decisions.
|
|
74
|
+
|
|
75
|
+
## Frequency encoding
|
|
76
|
+
|
|
77
|
+
This PostgreSQL example assumes `reference_transactions(mcc, address_key)` is an
|
|
78
|
+
explicitly chosen historical population available before scoring begins. Build
|
|
79
|
+
and version the reference once; do not refit it on later scoring transactions.
|
|
80
|
+
Use a separate earlier population for discovery rows if replaying their features.
|
|
81
|
+
The denominator includes non-null values only, separately for each attribute.
|
|
82
|
+
|
|
83
|
+
```sql
|
|
84
|
+
CREATE TEMP TABLE attribute_frequency_reference AS
|
|
85
|
+
WITH attribute_values AS (
|
|
86
|
+
SELECT 'mcc' AS attribute, mcc AS value
|
|
87
|
+
FROM reference_transactions
|
|
88
|
+
UNION ALL
|
|
89
|
+
SELECT 'address', address_key
|
|
90
|
+
FROM reference_transactions
|
|
91
|
+
), frequencies AS (
|
|
92
|
+
SELECT attribute, value, count(*) AS txn_count
|
|
93
|
+
FROM attribute_values
|
|
94
|
+
WHERE value IS NOT NULL
|
|
95
|
+
GROUP BY attribute, value
|
|
96
|
+
)
|
|
97
|
+
SELECT attribute, value, txn_count,
|
|
98
|
+
txn_count::double precision
|
|
99
|
+
/ sum(txn_count) OVER (PARTITION BY attribute) AS txn_share
|
|
100
|
+
FROM frequencies;
|
|
101
|
+
|
|
102
|
+
SELECT t.id,
|
|
103
|
+
coalesce(m.txn_share, 0.0) AS mcc_frequency,
|
|
104
|
+
t.mcc IS NULL AS mcc_missing,
|
|
105
|
+
t.mcc IS NOT NULL AND m.value IS NULL AS mcc_unseen,
|
|
106
|
+
coalesce(a.txn_share, 0.0) AS address_frequency,
|
|
107
|
+
t.address_key IS NULL AS address_missing,
|
|
108
|
+
t.address_key IS NOT NULL AND a.value IS NULL AS address_unseen
|
|
109
|
+
FROM scoring_transactions AS t
|
|
110
|
+
LEFT JOIN attribute_frequency_reference AS m
|
|
111
|
+
ON m.attribute = 'mcc' AND m.value = t.mcc
|
|
112
|
+
LEFT JOIN attribute_frequency_reference AS a
|
|
113
|
+
ON a.attribute = 'address' AND a.value = t.address_key;
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`scoring_transactions` adds `mcc text` and normalized `address_key text` to the
|
|
117
|
+
snapshot schema above. Zero is the declared fallback for missing/unseen values;
|
|
118
|
+
retain both flags rather than making the states indistinguishable. This frozen
|
|
119
|
+
encoding is not transaction velocity; current inclusion applies to rolling
|
|
120
|
+
features, not mutation of a frozen reference.
|
|
121
|
+
|
|
122
|
+
## Standard intervals
|
|
123
|
+
|
|
124
|
+
Use seconds to avoid timezone/DST-dependent calendar-day arithmetic.
|
|
125
|
+
|
|
126
|
+
| Suffix | PostgreSQL interval |
|
|
127
|
+
|---|---|
|
|
128
|
+
| `1m` | `interval '60 seconds'` |
|
|
129
|
+
| `5m` | `interval '300 seconds'` |
|
|
130
|
+
| `15m` | `interval '900 seconds'` |
|
|
131
|
+
| `30m` | `interval '1800 seconds'` |
|
|
132
|
+
| `1h` | `interval '3600 seconds'` |
|
|
133
|
+
| `2h` | `interval '7200 seconds'` |
|
|
134
|
+
| `6h` | `interval '21600 seconds'` |
|
|
135
|
+
| `24h` | `interval '86400 seconds'` |
|
|
136
|
+
| `2d` | `interval '172800 seconds'` |
|
|
137
|
+
| `7d` | `interval '604800 seconds'` |
|
|
138
|
+
| `14d` | `interval '1209600 seconds'` |
|
|
139
|
+
| `21d` | `interval '1814400 seconds'` |
|
|
140
|
+
| `30d` | `interval '2592000 seconds'` |
|
|
141
|
+
|
|
142
|
+
A simple `RANGE ... CURRENT ROW` frame is not equivalent: it can include all
|
|
143
|
+
same-time peers and includes the lower boundary. PostgreSQL also does not support
|
|
144
|
+
`COUNT(DISTINCT ...) OVER (...)`. Optimize for the target engine only after
|
|
145
|
+
proving parity with the lateral eligibility definition.
|
|
146
|
+
|
|
147
|
+
For cross-currency sums, first derive `amount_local` in a declared common currency
|
|
148
|
+
using a decision-time FX rate, then apply the same window eligibility. Return
|
|
149
|
+
unknown if any contributing amount lacks a valid conversion; never sum original
|
|
150
|
+
amounts from different currencies or silently omit missing conversions.
|
package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-rationale.md
RENAMED
|
@@ -20,14 +20,16 @@ and collection controls.
|
|
|
20
20
|
| Choice | Reason |
|
|
21
21
|
|---|---|
|
|
22
22
|
| Profile before label | The same status can represent different actors and outcomes across archetypes |
|
|
23
|
-
| Explicit negative class | Precision,
|
|
23
|
+
| Explicit negative class | Precision, false-positive rates, and lift need justified negatives; unknown outcomes are not negatives, but discovery can continue |
|
|
24
24
|
| Consent separate from authentication | Compromised credentials can pass technical checks |
|
|
25
25
|
| Reader order differs from workflow | Operators need decisions before methodology |
|
|
26
26
|
| Standalone strategy impact | Portfolio friction and exposure determine whether rules should ship |
|
|
27
27
|
| Count/rate and amount/share | Both operational volume and value matter |
|
|
28
28
|
| Context-specific impact | Authorization, completion, delay, review, and exposure use different denominators |
|
|
29
29
|
| Proxy and maturity disclosure | Delayed outcomes and operational actions are not confirmed fraud by default |
|
|
30
|
-
| Point-in-time
|
|
30
|
+
| Point-in-time features | Current inputs and known history permit real-time replay; future counterparties and investigations do not |
|
|
31
|
+
| Optional validation | Recent catches can support rapid discovery without proving future performance |
|
|
32
|
+
| Multiple rule hits | Package coverage is a transaction union, not a sum of overlapping rule counts |
|
|
31
33
|
| No review process in report | Review metadata is not business content |
|
|
32
34
|
|
|
33
35
|
## Domain examples
|
package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-template.md
RENAMED
|
@@ -20,13 +20,14 @@ Do not title chapters as analysis steps. Keep review details out of the report.
|
|
|
20
20
|
|
|
21
21
|
Use no more than five top-level findings:
|
|
22
22
|
|
|
23
|
-
1. Analysis profile, sample span, and positive-label baseline
|
|
23
|
+
1. Analysis profile, sample span, and positive-label baseline where available
|
|
24
24
|
2. Adopted rule classes and domain-appropriate actions
|
|
25
25
|
3. Adopted strategy package impact
|
|
26
26
|
4. Material attribution or validation limitation, only when decision-critical
|
|
27
27
|
|
|
28
28
|
For strategy impact, report triggered count/rate and amount/share, followed by
|
|
29
|
-
precision and recall
|
|
29
|
+
precision and recall where supported. Mark unsupported metrics unavailable and
|
|
30
|
+
state why. Add the selected contexts' main customer, operations,
|
|
30
31
|
conversion, delay, exposure, or loss measure.
|
|
31
32
|
|
|
32
33
|
Nested numbered lists use three-space indentation and `1.`, `2.`, `3.` markers.
|
|
@@ -36,7 +37,8 @@ Do not use Markdown bold markers in the report body.
|
|
|
36
37
|
|
|
37
38
|
### 2.1 样本范围
|
|
38
39
|
|
|
39
|
-
Data source, event grains, time span,
|
|
40
|
+
Data source, transaction scoring grain, supporting event grains, time span,
|
|
41
|
+
currencies, and portfolio constants.
|
|
40
42
|
|
|
41
43
|
### 2.2 分析画像与归因
|
|
42
44
|
|
|
@@ -57,8 +59,9 @@ Explain unresolved attribution. Do not imply consent from authentication.
|
|
|
57
59
|
|
|
58
60
|
### 2.3 标签定义
|
|
59
61
|
|
|
60
|
-
State label provenance (`file-column
|
|
61
|
-
and maturity window. Define and count all
|
|
62
|
+
State label provenance (`file-column`, `user-defined`, or `absent`), confirmed
|
|
63
|
+
versus proxy, and maturity window where applicable. Define and count all known
|
|
64
|
+
populations; state unavailable definitions explicitly rather than inventing them:
|
|
62
65
|
|
|
63
66
|
| Population | Required content |
|
|
64
67
|
|---|---|
|
|
@@ -66,20 +69,25 @@ and maturity window. Define and count all three populations:
|
|
|
66
69
|
| Negative | Exact values/conditions and count |
|
|
67
70
|
| Unlabeled | Pending, immature, unknown, overlapping, or out-of-scope conditions and count |
|
|
68
71
|
|
|
69
|
-
Report the positive base rate among labeled rows
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
Report the positive base rate among labeled rows only where a meaningful
|
|
73
|
+
positive/negative population exists, with its denominator. If an existing outcome
|
|
74
|
+
column supplies the positive label, disclose the assumption that its other
|
|
75
|
+
mature, non-explicitly-unlabeled values are negative. If the user defined the
|
|
76
|
+
positive condition, show the separately supplied negative condition when present.
|
|
77
|
+
Otherwise keep remaining rows unlabeled and omit unsupported metrics. Absent
|
|
78
|
+
labels do not block a descriptive rule report. Separate archetypes' labels.
|
|
74
79
|
|
|
75
|
-
### 2.4
|
|
80
|
+
### 2.4 证据范围
|
|
76
81
|
|
|
77
|
-
State
|
|
78
|
-
|
|
82
|
+
State discovery/scoring windows, outcome cutoff, and whether selection and
|
|
83
|
+
measurement use the same transactions. Recent observations and retrospective
|
|
84
|
+
sample metrics do not establish future performance. No train/test/holdout split
|
|
85
|
+
is required; describe subsequent monitoring or optional temporal validation if
|
|
86
|
+
performed. Name the decision point and real-time versus review track.
|
|
79
87
|
|
|
80
88
|
## 3. 规则发现
|
|
81
89
|
|
|
82
|
-
### 3.1
|
|
90
|
+
### 3.1 规则清单与观察指标
|
|
83
91
|
|
|
84
92
|
Suggested columns:
|
|
85
93
|
|
|
@@ -90,7 +98,11 @@ Suggested columns:
|
|
|
90
98
|
- Group conditions into a few operational rule classes.
|
|
91
99
|
- State explicit windows, units, currency, and frozen-list versions.
|
|
92
100
|
- Use actions supplied by selected context packs.
|
|
93
|
-
- List rules once.
|
|
101
|
+
- List rules once. Preserve every transaction-rule hit; a transaction can match
|
|
102
|
+
several rules. Multi-rule unions belong to strategy packages in chapter 4.
|
|
103
|
+
- Report known-fraud hits, labeled/unlabeled hit counts, and metric denominators.
|
|
104
|
+
Missing negatives do not prevent discovery; they prevent precision and
|
|
105
|
+
false-positive claims. Label same-sample selection explicitly.
|
|
94
106
|
|
|
95
107
|
### 3.2 稳定性与归因
|
|
96
108
|
|
|
@@ -112,8 +124,13 @@ For every package/action row, report in this order:
|
|
|
112
124
|
|
|
113
125
|
1. Triggered count and rate
|
|
114
126
|
2. Triggered amount and amount share, with currency
|
|
115
|
-
3. Precision
|
|
116
|
-
4. Recall
|
|
127
|
+
3. Precision, where labeled hits support it; disclose unlabeled hits separately
|
|
128
|
+
4. Recall, against the explicitly defined known-positive population
|
|
129
|
+
|
|
130
|
+
Deduplicate package coverage and amount by transaction ID. Show rule overlap and
|
|
131
|
+
incremental coverage against a named base package. Declare action precedence
|
|
132
|
+
before reporting mutually exclusive action totals. Never sum per-rule counts as
|
|
133
|
+
portfolio coverage. Unsupported metrics are unavailable, not zero.
|
|
117
134
|
|
|
118
135
|
Suggested columns:
|
|
119
136
|
|
|
@@ -147,15 +164,20 @@ assumptions. Keep stricter non-default actions visibly separate.
|
|
|
147
164
|
|
|
148
165
|
### 5.1 入选短名单
|
|
149
166
|
### 5.2 候选特征集
|
|
150
|
-
### 5.3
|
|
167
|
+
### 5.3 参考编码、观察名单或图谱特征(when applicable)
|
|
151
168
|
|
|
152
|
-
Keep this shorter than rule findings. Name point-in-time construction
|
|
153
|
-
links where material.
|
|
169
|
+
Keep this shorter than rule findings. Name point-in-time construction, current
|
|
170
|
+
transaction inclusion, reference versions, and weak links where material.
|
|
171
|
+
Separate post-transaction entity/period findings from real-time features.
|
|
172
|
+
For collection/payout features, disclose counterparty direction and entity grain,
|
|
173
|
+
FIFO account/currency scope and ledger policy, matched/unmatched funding,
|
|
174
|
+
known-payer coverage, and any enrichment or ownership uncertainty. Matched-only
|
|
175
|
+
fund age and known recent-funds share must retain their coverage qualifiers.
|
|
154
176
|
|
|
155
177
|
## 6. 附录
|
|
156
178
|
|
|
157
179
|
### A. 决策时点与字段排除
|
|
158
|
-
### B.
|
|
180
|
+
### B. 标签成熟度、证据范围与可选验证
|
|
159
181
|
### C. 仅描述性信号与未入选候选
|
|
160
182
|
### D. 假设、限制与政策依赖
|
|
161
183
|
|
|
@@ -173,9 +195,9 @@ links where material.
|
|
|
173
195
|
### 2.1 样本范围
|
|
174
196
|
### 2.2 分析画像与归因
|
|
175
197
|
### 2.3 标签定义
|
|
176
|
-
### 2.4
|
|
198
|
+
### 2.4 证据范围
|
|
177
199
|
## 3. 规则发现
|
|
178
|
-
### 3.1
|
|
200
|
+
### 3.1 规则清单与观察指标
|
|
179
201
|
### 3.2 稳定性与归因
|
|
180
202
|
### 3.3 可落地运营建议
|
|
181
203
|
## 4. 策略整体影响
|
package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/review-checklist.md
RENAMED
|
@@ -9,7 +9,7 @@ a fatal issue requires a user-approved restart.
|
|
|
9
9
|
- Draft report and source paths
|
|
10
10
|
- Analysis profile, event grain, and decision point
|
|
11
11
|
- Label definition, maturity window, and attribution confidence
|
|
12
|
-
-
|
|
12
|
+
- Discovery/scoring windows, selection overlap, and optional validation evidence
|
|
13
13
|
- Allowed and excluded fields
|
|
14
14
|
- Rule definitions and metrics with evaluation window
|
|
15
15
|
- Strategy actions, impact measures, denominators, and assumptions
|
|
@@ -34,15 +34,15 @@ a fatal issue requires a user-approved restart.
|
|
|
34
34
|
|
|
35
35
|
### Pre-flight
|
|
36
36
|
|
|
37
|
-
- [ ]
|
|
37
|
+
- [ ] Data readiness was established before using affected features or metrics
|
|
38
38
|
- [ ] Input readability, row grain, time field, and label provenance were checked
|
|
39
39
|
- [ ] File-column positives map remaining mature rows to negative only after
|
|
40
40
|
preserving explicit missing/pending/unknown/unlabeled states
|
|
41
|
-
- [ ] User-defined positives
|
|
42
|
-
|
|
41
|
+
- [ ] User-defined positives have explicit negative definitions before metrics
|
|
42
|
+
requiring negatives; missing negatives do not block rapid discovery
|
|
43
43
|
- [ ] Both/neither/immature rows are unlabeled, or their absence is demonstrated
|
|
44
|
-
- [ ]
|
|
45
|
-
|
|
44
|
+
- [ ] Positive-only or unlabeled discovery avoids unsupported precision, lift,
|
|
45
|
+
false-positive rates, or portfolio recall
|
|
46
46
|
|
|
47
47
|
### Analysis profile and attribution
|
|
48
48
|
|
|
@@ -57,40 +57,61 @@ a fatal issue requires a user-approved restart.
|
|
|
57
57
|
|
|
58
58
|
### Label and maturity
|
|
59
59
|
|
|
60
|
-
- [ ] Label provenance is stated as file-column
|
|
60
|
+
- [ ] Label provenance is stated as file-column, user-defined, or absent
|
|
61
61
|
- [ ] Exact positive, negative, and unlabeled definitions and counts are stated
|
|
62
62
|
- [ ] Existing outcome-column labels disclose the assumption used to map other
|
|
63
63
|
mature values to negative and preserve explicit pending/unknown states
|
|
64
|
-
- [ ] User-defined
|
|
65
|
-
|
|
64
|
+
- [ ] User-defined positives use separately defined negatives where metrics need
|
|
65
|
+
them; otherwise negatives are explicitly unavailable and other rows unlabeled
|
|
66
66
|
- [ ] Positive and negative conditions are disjoint; neither/both rows are unlabeled
|
|
67
67
|
- [ ] Confirmed versus proxy status is honest
|
|
68
|
-
- [ ] Positive base rate
|
|
68
|
+
- [ ] Positive base rate, if available, uses labeled rows as denominator;
|
|
69
|
+
positive-only samples are not presented as a portfolio baseline
|
|
69
70
|
- [ ] Outcome maturity window is defined; immature rows are not clean negatives
|
|
70
71
|
- [ ] Separate archetypes are not blended into one target
|
|
71
72
|
- [ ] Label, synonyms, actions, and later investigation outcomes are excluded
|
|
72
73
|
|
|
73
|
-
###
|
|
74
|
+
### Evidence basis
|
|
74
75
|
|
|
75
|
-
- [ ]
|
|
76
|
-
- [ ] No
|
|
77
|
-
- [ ]
|
|
78
|
-
- [ ]
|
|
79
|
-
|
|
76
|
+
- [ ] Discovery/scoring windows, cutoff, and same-sample selection are disclosed
|
|
77
|
+
- [ ] No mandatory split delays rapid rule discovery
|
|
78
|
+
- [ ] Sample catches are not presented as proof of future performance
|
|
79
|
+
- [ ] Claimed subsequent/temporal validation uses fixed rules and lists, without
|
|
80
|
+
tuning on the claimed validation outcomes
|
|
81
|
+
- [ ] Reference encodings and graph/list inputs were available at decision time
|
|
82
|
+
- [ ] Missing timestamps disable affected history features rather than invent time
|
|
80
83
|
|
|
81
84
|
### Decision-time validity
|
|
82
85
|
|
|
83
86
|
- [ ] Every rule field exists at the stated decision point
|
|
84
87
|
- [ ] Current response, settlement, return, recall, dispute, reimbursement,
|
|
85
88
|
restriction, and investigation fields do not leak backward
|
|
86
|
-
- [ ]
|
|
89
|
+
- [ ] Real-time scoring is one transaction; duplicates/retries/lifecycle rules
|
|
90
|
+
and stable transaction IDs are defined
|
|
91
|
+
- [ ] Current transaction contributes by default; first eligible count is one
|
|
92
|
+
- [ ] Windows use the standard vocabulary, elapsed durations, and `(t-window,t]`
|
|
93
|
+
- [ ] Timestamp ties, arrival availability, and late/duplicate processing are defined
|
|
94
|
+
- [ ] Null entity keys are not pooled; distinct counts ignore missing target keys
|
|
95
|
+
- [ ] Amount sums use a declared common currency and explicit missing-FX behavior
|
|
96
|
+
- [ ] Cold-start history and incomplete lookbacks are disclosed
|
|
97
|
+
- [ ] Completed entity/period aggregates remain post-transaction review findings
|
|
87
98
|
- [ ] Graph features are point-in-time snapshots
|
|
88
99
|
- [ ] Zero-variance, timing, leakage, and context-only exclusions are listed
|
|
100
|
+
- [ ] Company/person/account roles and address roles remain distinct; uncertain
|
|
101
|
+
name, account, or ownership links are not silently merged
|
|
102
|
+
- [ ] Phone/ID geography means documented numbering/document geography, not
|
|
103
|
+
current residence; unsupported lookups remain unknown
|
|
104
|
+
- [ ] Platform/PSP/holder classifications declare their object, source, timing,
|
|
105
|
+
and confidence; unknown is not false and independent flags may overlap
|
|
89
106
|
- [ ] Weak entity links are not presented as unique identities
|
|
90
107
|
|
|
91
108
|
### Metrics and actions
|
|
92
109
|
|
|
93
|
-
- [ ]
|
|
110
|
+
- [ ] Multiple rule hits per transaction remain intact
|
|
111
|
+
- [ ] Package count/value uses transaction unions, with overlap and incremental
|
|
112
|
+
coverage; action-level totals declare precedence
|
|
113
|
+
- [ ] Partial-label metrics expose denominators and unlabeled hits
|
|
114
|
+
- [ ] Rule metrics use occurrence → precision → recall where supported
|
|
94
115
|
- [ ] Count metrics remain present when value metrics are added
|
|
95
116
|
- [ ] Small-N, unstable, or attribution-uncertain segments are monitored or dropped
|
|
96
117
|
- [ ] Actions come from selected contexts and match precision/evidence severity
|
|
@@ -104,7 +125,7 @@ a fatal issue requires a user-approved restart.
|
|
|
104
125
|
- [ ] Analysis profile and attribution table appears near the start
|
|
105
126
|
- [ ] Strategy impact is a standalone chapter
|
|
106
127
|
- [ ] Every package/action has triggered count/rate and amount/share with currency,
|
|
107
|
-
followed by precision and recall
|
|
128
|
+
followed by precision and recall where supported; unavailable metrics explain why
|
|
108
129
|
- [ ] Mixed currencies are not summed without documented FX conversion
|
|
109
130
|
- [ ] Domain impact measures and denominators come from selected context packs
|
|
110
131
|
- [ ] Observed results are distinct from scenario estimates
|
|
@@ -143,8 +164,15 @@ Read and check each selected pack. At minimum:
|
|
|
143
164
|
|
|
144
165
|
### Card payment
|
|
145
166
|
|
|
167
|
+
- Reported-fraud labels union available DART/network reports and fraud-category
|
|
168
|
+
disputes, including pre-disputes, by transaction ID; any explicit override is
|
|
169
|
+
stated. Source-only/overlap/union and lifecycle coverage reconcile.
|
|
170
|
+
- Non-fraud disputes and duplicate lifecycle rows do not inflate positives;
|
|
171
|
+
reversal/recovery is separate from the existence of a fraud allegation.
|
|
172
|
+
- Scheme-monitoring ratio exclusions do not silently narrow detection labels.
|
|
146
173
|
- Current CVV, AVS, authorization response, and 3DS result respect timing.
|
|
147
|
-
- BIN lists
|
|
174
|
+
- BIN lists state discovery/version and causal availability; issuer name is
|
|
175
|
+
live-operable if used.
|
|
148
176
|
- 3DS failures are outside subsequent authorization denominator.
|
|
149
177
|
|
|
150
178
|
### Collection, transfer, and payout
|
|
@@ -152,6 +180,18 @@ Read and check each selected pack. At minimum:
|
|
|
152
180
|
- Settlement, reversibility, completion, return, and recall timing are correct.
|
|
153
181
|
- Sequence and graph features are point-in-time.
|
|
154
182
|
- Completion, abandonment, delay, workload, and exposure denominators are stated.
|
|
183
|
+
- For collection/payout, apply
|
|
184
|
+
[collection/payout feature checks](collection-payout-features.md): FIFO stays
|
|
185
|
+
within ledger account/currency, uses available lots and deterministic order,
|
|
186
|
+
and conserves each lot across partial allocations.
|
|
187
|
+
- Current payout is previewed once against pre-debit state; pre-debit rejected
|
|
188
|
+
attempts do not consume funds and reservations cannot be spent twice. A failure
|
|
189
|
+
after debit does not restore funds without an explicit ledger reversal/return.
|
|
190
|
+
- Unmatched balance and missing counterparty history are disclosed; allocation
|
|
191
|
+
shares use the stated denominator and are not silently renormalized.
|
|
192
|
+
- Fees, reversals, refunds and FX use explicit ledger semantics; FIFO is an
|
|
193
|
+
attribution convention, not proof of money provenance.
|
|
194
|
+
- Counterparty features declare direction, identity grain, and pair/entity scope.
|
|
155
195
|
|
|
156
196
|
## Finding format
|
|
157
197
|
|