Fintech track · INHA University team

Which alerts get escalated?

We explored 10 million transactions behind 20,000 monitoring alerts to find what separates the alerts specialists escalate from the ones they dismiss, and used those findings to build a ranking model.

01 · Task & approach

Predict which alerts will be escalated

A monitoring unit receives automated alerts built from customers' transaction history. Specialists either dismiss each alert or escalate it. For every alert in a hidden test set, we predict the probability of escalation. The data is synthetic and contains no real customer records.

Input

A list of alerts with their date and outcome, plus every transaction behind each alert: time, direction (in / out), type (card, bank transfer, cash, international) and a standardised amount.

Metric: ROC-AUC

Measures ranking only: how often a random escalated alert gets a higher score than a random dismissed one. 0.5 is a coin flip, 1.0 is perfect.

Deliverables

A prediction file (signal_id,ehtimollik), this EDA website, and a reproducible notebook.

STEP 1

Explore

Check quality, then test concrete questions against the data.

STEP 2

Summarise

Turn each alert's ~500 transactions into one row of statistics.

STEP 3

Model

Tune three gradient-boosting models and keep the best.

STEP 4

Validate

Cross-validation, plus a final check on the newest alerts, held back from the start.

02 · Dataset & target

Two linked tables, about 1 in 6 alerts escalated

Each alert links to its transactions by signal_id, covering the 180 days before the alert. The data is clean: no missing values, no duplicates, and no transaction shared between alerts.

signals 14,000 train · 6,000 test
  • signal_id · key
  • signal_sanasi · alert date
  • eskalatsiya · target 0/1
1 : N ≈ 500 per alert
transactions 10.0 M rows
  • signal_id · link to alert
  • tranzaksiya_vaqti · timestamp
  • kirim_chiqim · in / out
  • tranzaksiya_turi · type
  • miqdor_indeksi · amount

Target distribution

Training alerts by outcome

Escalation rate by month

% of alerts escalated
The rate stays around 17% with no trend over time, and test alerts cover the same dates as training. So shuffled cross-validation folds are safe.
03 · Transaction behaviour

What a typical history looks like

Cards (54%) and bank transfers (39%) dominate. Three of every four transactions are incoming. Cash and international transfers are rare.

Transaction type × direction

Millions of training transactions
incoming (kirim)outgoing (chiqim)

Activity before the alert

% of each class's transactions, by week before the alert
DismissedEscalated
Activity doubles in the final week for both classes alike. The burst probably triggers the alert, so it can't tell escalated from dismissed.
04 · Key findings

Three things the data told us

To score a single statistic we use its separation, |AUC − 0.5|: 0 means it can't tell the classes apart, and higher is better.

1

Whole history beats recent activity

Separation grows with the lookback window, so short-term "velocity" features were dropped.

2

Bank transfers carry the signal

Escalated alerts lean toward smaller bank transfers. Other types barely differ on their own.

3

Contrasts beat levels

Comparing a type with the customer's own overall level roughly doubles separation. This was the biggest win.

Longer history separates better

Separation of the amount statistics, by lookback window
meanspread (std)

Level vs contrast, per type

Separation of the per-type mean, before and after subtracting the alert's own level
absolute levelrelative to own level
Cash looks useless alone (0.001) but becomes one of the best signals as a contrast (0.075).

Bank transfer sizes: escalated vs dismissed

How much more common each amount is in escalated alerts; above 1.0 = more common
Small transfers are ~15% more common in escalated alerts, and large ones up to ~35% less common.
05 · Features & model

From findings to features

Each finding became a feature group: 470 candidate features in total. Tuning picked the best 40, and 70% of those are contrasts.

Contrasts

Each type vs the customer's own level, type vs type (e.g. bank minus cash), incoming vs outgoing. From finding 3.

Distribution shape

Mean, spread, skewness, min/max and quantiles, computed per type and direction. From finding 2.

Counts & shares

How many transactions of each type, so the model knows when a statistic rests on only a few.

Three tuned models

ROC-AUC: cross-validation vs held-back newest alerts
cross-validationholdout (newest 1/6)
All three score within noise of each other. We ship XGBoost: 40 features, averaged over 3 random seeds.

Most useful features

Ranked by model importance
  1. bank_m_kart_q95large bank transfers vs large card payments
  2. bank_m_naqd_q75bank transfers vs cash
  3. kart_minsmallest card payment
  4. kart_q99_rellargest card payments vs the customer's own level
  5. own_minsmallest transaction overall

Tried and dropped

  • Short-term velocity and burst featuresno gain
  • Night / weekend activity, money in → quickly outno gain
  • Neural networks over the raw transaction sequenceworse (0.581)
  • Averaging the three models+0.002, noise
  • Probability calibrationcan't raise AUC
06 · Conclusion

What we learned

  1. The data is clean and leak-free, with a stable 17% escalation rate over time.
  2. One transaction says almost nothing. The signal appears only when the full 180-day history is summarised; recent bursts don't help.
  3. How a customer's bank transfers compare with their other activity matters more than any absolute amount.
  4. A tuned XGBoost on 40 contrast-heavy features reaches ROC-AUC 0.660 in cross-validation and 0.689 on the newest held-back alerts.
07 · Team

Team members

BR

Bobur Rustamov Captain

b.rustamov@student.inha.uz · +998977070420
MA

Mannapov Arman

a.mannapov@student.inha.uz
XJ

Xasanov Jasurbek

j.xasanov@student.inha.uz