bayes for days
sds docs LABELS.md
6.8 kB

Labels, worked through #

docs/FEATURES.md exists because a sentence is not enough to argue with a fitted weight. A label needs it more than a feature does. A feature is a number about one candidate at one instant, and a reader can check it by looking at the board; a label is a window - it looks forward from the decision's round to the end of the match, discounts what it finds, and collapses it to one number. None of that is visible in the name, and two labels whose names differ by a word can have completely different shapes over the same match.

So each figure here plots one label over the rounds of a single hand-built match, for both seats at once. Two lines rather than one, because the question a label has to answer is "which of these two sides was doing better", and a label that draws the same line twice cannot answer it. That is not hypothetical: behaviour_distance_engagement drew two identical lines through four corpora before anybody looked, and sds labelrank scored it 0 decided against 964 ties.

The match is small enough to check by hand and is written out below. Nothing on this page is transcribed - every figure is rendered by label_value itself, through the same code sds train fits with, and tests/test_labeldoc.py fails if the file on disk stops matching what the code renders.

The match #

A 2v2 on a 17-hex board. North brings a heavy and a medium, South the same, and the two sides start eleven hexes apart.

  • Round 1 - both sides deploy and close. Nobody shoots.
  • Round 2 - first exchange. North lands 80 points across both of South's machines; South lands 45 into North's heavy.
  • Round 3 - North concentrates on South's medium, which had already been hurt, and takes it apart. South's heavy puts 50 into North's medium, 25 of it into the rear.
  • Round 4 - North's heavy runs hot and shuts down. South's heavy, alone now, backs off; the gap opens.
  • Round 5 - North's medium closes and finishes South's heavy. The match ends.

Every figure below plots one label at each decision round of that match. A point is what a decision taken in that round would be labelled with, which is why round 5 is empty for most of them: the window a label looks through runs from the decision to the end of the match, and after the last round there is nothing left to look at. An open circle on the axis is a round where the label is undefined rather than zero - a share with nothing in its denominator has no value, and calling it zero would fill the column with rows claiming a failure in windows where nobody shot anybody.

All 27 of them.

alpha_strike #

What we fired against what our surviving guns could still have fired.

alpha_strike

behaviour_distance_engagement #

How far our machines stood from theirs, as a share of the board, averaged over the rest of the match.

behaviour_distance_engagement

bv_loss_inflicted #

Discounted enemy bv removed from the decision's round to the end of the match.

bv_loss_inflicted

bv_lost #

Discounted bv of ours removed over the same window.

bv_lost

bv_per_damage_dealt #

Enemy battle value removed per point of damage we dealt - high when a point takes a gun or a pilot off, low when it strips armour.

bv_per_damage_dealt

bv_per_damage_taken #

Our battle value lost per point of damage we took.

bv_per_damage_taken

bv_trade_ratio #

Enemy bv removed against ours lost, as a share in 0..1.

bv_trade_ratio

crippled_suffered #

Discounted count of our machines put out of the fight - killed or crippled - per machine we brought.

crippled_suffered

damage_focus #

How far our damage concentrated on a few of their machines rather than spreading across all of them, 0 to 1.

damage_focus

damage_inflicted #

Discounted enemy armour and structure removed from the decision's round to the end.

damage_inflicted

damage_taken #

Discounted armour and structure of ours removed over the same window.

damage_taken

damage_trade_ratio #

Damage inflicted against damage taken, as a share in 0..1.

damage_trade_ratio

dispersion #

How spread out our force stood, as a share of the board, averaged over the rest of the match.

dispersion

finishing #

The share of our damage that landed on machines already hurt when the window opened.

finishing

focus_suffered #

How far their damage concentrated on a few of our machines rather than spreading across all of them, 0 to 1.

focus_suffered

heat_carried #

How hot our machines ran, averaged over the rest of the match.

heat_carried

inflicted_bv_per_round #

Enemy bv removed from the decision's round to the end, per round it took to remove.

inflicted_bv_per_round

inflicted_percent_of_maximum #

Damage inflicted against what our own guns could have landed.

inflicted_percent_of_maximum

kills_secured #

Discounted count of enemy units removed, as a share of what they started with.

kills_secured

mission_kills_inflicted #

Discounted count of enemy units removed from the fight - killed or crippled - as a share of what they started with.

mission_kills_inflicted

prone_time #

The share of our machine-rounds spent on the ground.

prone_time

rear_share_dealt #

The share of the damage we dealt that landed on rear armour.

rear_share_dealt

rear_share_taken #

The share of the damage we took that landed on our rear armour.

rear_share_taken

shutdowns_suffered #

Discounted count of our machines heat switched off, per machine we brought.

shutdowns_suffered

suffered_bv_per_round #

Our bv removed over the same window, per round.

suffered_bv_per_round

suffered_kills #

Discounted count of ours removed, as a share of what we started with.

suffered_kills

trade_units #

Machines we removed against machines we lost, as a share in 0..1 - the count that drives the initiative sequence.

trade_units