{% extends 'base.html' %} {% block title %}Analytics – {{ app_brand }}{% endblock %} {% block head %} {% endblock %} {% block content %}
Squad intelligence

POOL ANALYTICS

Every number here is aggregated across all active teammates — picks, stakes, accuracy, and who’s leading the MOTM and P/L boards.

{{ pool.members or 0 }}
Active members
{{ pool.preds or 0 }}
Total predictions
{{ pool.settled or 0 }}
Settled picks
{% if win_acc is not none %}{{ win_acc }}%{% else %}—{% endif %}
Pool winner hit rate
{% if motm_acc is not none %}{{ motm_acc }}%{% else %}—{% endif %}
Pool MOTM hit rate
{{ '%.0f'|format(pool.total_staked or 0) }}
Points staked (all)
{% if pool.avg_bid %}{{ '%.0f'|format(pool.avg_bid) }}{% else %}—{% endif %}
Avg bid / pick
{{ '%.0f'|format(pool.avg_pts or 0) }}
Avg balance / member
🗓️ FIXTURE COVERAGE
Schedule {{ match_counts.n_done or 0 }} completed · {{ match_counts.n_open or 0 }} still open · {{ match_counts.n_all or 0 }} total in system
Engagement {{ matches_touched }} distinct matches have at least one pool pick logged.
🧠 CROWD vs RESULT
{% if crowd.n %}

{{ crowd.pct }}%

On {{ crowd.n }} finished matches with picks, the plurality crowd favourite matched the actual winner that many times.

{% else %}

Not enough completed results with predictions to measure consensus yet.

{% endif %}
🎯 POPULAR WINNER PICKS

Which teams the pool backs most often (by full franchise name).

{% if pick_rows %} {% for row in pick_rows %}
{{ team_abbr.get(row.predicted_winner, row.predicted_winner[:3]) }} — {{ row.predicted_winner }} {{ row.c }}
{% endfor %} {% else %}
No picks in the pool yet.
{% endif %}
💰 BID SIZE MIX

How aggressively the squad is staking (points per prediction).

{% set bins = [ ('≤ 50', bid_bins.b_low or 0), ('51 – 150', bid_bins.b_mid or 0), ('151 – 300', bid_bins.b_high or 0), ('300+', bid_bins.b_whale or 0), ] %} {% for label, v in bins %}
{{ label }}
{{ v }}
{% endfor %}
Combined outstanding member balances: {{ '%.0f'|format(sum_balances) }} pts · Net P/L summed over all settled picks: {{ '%+.0f'|format(settled_pl_sum) }} pts
⭐ MOTM BOARD

Correct MOTM calls vs attempts (settled matches only).

{% if motm_board %} {% for r in motm_board %} {% set rate = ((r.hits / r.attempts * 100)|round(1)) if r.attempts else 0 %} {% endfor %}
Player Hits Att. Rate
{{ r.display_name or r.username }} {{ r.hits }} {{ r.attempts }} {{ rate }}%
{% else %}
No MOTM outcomes recorded yet.
{% endif %}
🎯 WINNER ACCURACY LEADERS

Min. 2 settled picks — ranked by hit rate, then volume.

{% if sharp_picks %} {% for r in sharp_picks %} {% set rate = ((r.w / r.g * 100)|round(1)) if r.g else 0 %} {% endfor %}
Player W / G Rate
{{ r.display_name or r.username }} {{ r.w }} / {{ r.g }} {{ rate }}%
{% else %}
Need more settled results to rank the squad.
{% endif %}
📈 NET P&L FROM PICKS

Net points won or lost on settled predictions (adds up everyone’s match results).

{% if pl_board %} {% for r in pl_board %} {% endfor %}
Player Net P/L Balance
{{ r.display_name or r.username }} {{ r.season_pl|delta_sign }} {{ '%.0f'|format(r.points) }}
{% else %}
No settled P/L yet.
{% endif %}
⚡ EXTREMES & MOTM VOLUME
Best single match {% if extrema.best_single is not none %}{{ extrema.best_single|delta_sign }}{% else %}—{% endif %} Largest one-off gain logged by anyone in the pool.
Toughest single match {% if extrema.worst_single is not none %}{{ extrema.worst_single|delta_sign }}{% else %}—{% endif %} Biggest swing the other way on one result.
MOTM tries {{ pool.motm_attempts or 0 }} settled rows with a MOTM name · {{ pool.motm_hits or 0 }} correct · {{ pool.motm_misses or 0 }} wrong
Avg P/L when settled {% if extrema.avg_settled_pl is not none %}{{ extrema.avg_settled_pl|delta_sign }}{% else %}—{% endif %} Mean points change per settled prediction, squad-wide.
✨ SQUAD TAKEAWAYS
{% endblock %}