← Journal·Signals

Understanding the Conviction Score: How We Rank Insider Signals

The NexusForm4 conviction score compresses insider role, trade size, insider trading history, and cluster density into a single 0-100 number. Here's how it works.

·7 min read·NexusForm4 Research

A cluster of insider buys is a good signal. A ranked, comparable cluster is a usable one. The conviction score exists so that a portfolio manager or systematic strategy can compare a five-insider $10M cluster in a mid-cap to a three-insider $600K cluster in a small-cap on the same axis.

What goes into the score

The score is a bounded 0-100 composite of five orthogonal-ish factors:

  1. Role weight — CEO/CFO/COO trades weight 3x independent directors, 5x non-executive 10% owners.
  2. Dollar magnitude — log-scaled to compress dynamic range and prevent single trades from dominating.
  3. Personal concentration — dollar value relative to the insider's disclosed pre-trade holdings.
  4. Temporal density — a 3-day cluster of 5 insiders scores higher than the same 5 insiders spread across 14 days.
  5. Historical opportunism — insiders who trade rarely score higher than serial buyers, following Cohen et al. (2012).

What deliberately does not go in

Price momentum, valuation, or fundamentals. The score measures insider signal quality, not stock quality. Mixing them creates a factor collision that makes attribution impossible. If you want to combine insider signal with quality, do it downstream at the portfolio-construction layer.

How to use it in a strategy

Use conviction score three ways:

  • As a rank filter — take only the top decile of trailing 90-day scores.
  • As a weight — size positions proportional to score above a threshold.
  • As a triage input — surface the top 10 daily to a human analyst for discretionary review.
python
signals = requests.get(URL + "/signals/cluster-buys", headers=H).json()
ranked = sorted(signals, key=lambda s: s["conviction_score"], reverse=True)
for s in ranked[:10]:
    print(s["ticker"], s["conviction_score"], s["insiders"], s["value_usd"])

Score interpretation ranges

  • 0-40 — routine or low-conviction activity. Ignore for signal.
  • 40-70 — meaningful cluster, worth screening.
  • 70-85 — high-quality cluster, actionable in a systematic strategy.
  • 85-100 — rare, top-decile events. Warrants human review before sizing.
A score is a lens, not a decision. Backtest your entry threshold on out-of-sample data before wiring it to execution.

Continue reading