AdaptEdgeML™ is JAMR™'s on-device, self-adapting spam risk engine. Architecturally it is a single-layer logistic regression classifier — a one-neuron "perceptron" with a sigmoid output — trained online (in-service) with stochastic gradient descent. There are no hidden layers: the model is one weight per feature plus a bias, 47 weights in all, running entirely on the phone with no external data transmission.
Given an incoming number, AdaptEdgeML™ extracts 47 signals across five categories and produces a 0–1000 risk score, a confidence level, a LOW / MEDIUM / HIGH classification, and a recommendation.
How and when the number calls over time.
What the number itself reveals.
First-contact, wangiri, callback pressure and neighbor-spoof proximity.
The user's own behavior toward the number.
FCC and FTC complaint data and NANPA area code data, downloaded to your phone at install and in periodic updates.
Call history is loaded from the app's own call-log mirror (last 20 calls, never the system call log), and the user's phone number feeds the neighbor-spoofing features.
The model starts from hand-set prior weights and is bootstrapped by AdaptEdgeCal with 8,000 synthetic call histories, run through the same feature extractors as live calls at quarter sample weight, so it has a usable opinion from day one that real calls can still overturn.
From then on it learns continuously from the user's real actions, each weighted by how strong a signal that action is. Every real sample nudges the weights via a simple gradient step and is persisted immediately.
Synthetic samples shape the weights but contribute nothing to accuracy, confidence or trust. Accuracy is an exponential moving average over real samples only, and confidence is earned in tiers:
| Real samples seen | Confidence |
|---|---|
| Under 10 | 0.3 |
| Under 50 | 0.5 |
| 50 and up | Accuracy-based, up to 0.9 |
A maturity score (real samples ÷ 50) tells the ThreatIntelligence decision layer how much of its ML factor to take from the model versus its rule-based fallback. Until the model has seen enough real calls, the rules stay in charge.
Non-finite feature values are zeroed before they reach the model.
A training step that would produce non-finite weights is rolled back and discarded.
If persisted weights are ever found corrupted, the model resets to its priors and signals the calibrator to re-bootstrap.
Because short-lived instances train while the long-lived screening-service instance predicts, every prediction and every learning step first checks whether another instance has saved newer weights and reloads them if so.
Fast enough to run inside CallScreeningService on every call.
Small enough to persist in SharedPreferences.
Each feature has one weight the debug screen can show.
Satisfies the Play Store requirements for on-device processing, no data transmission and privacy-preserving local training.
It is linear — it cannot learn interactions between features — which is why the surrounding ThreatIntelligence layer combines its output with rule-based and regulatory factors rather than relying on it alone.