diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-20 16:20:44 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-20 16:20:44 +0200 |
| commit | 862f71901c3e11f9d21a33b39a110357ccc6d4c4 (patch) | |
| tree | d8cea4aeea10db7b380a1b3f0fb6fe26bbb50026 /cli | |
| parent | 15ce334f357ca4f061977ad342292b21c5e60ea6 (diff) | |
fix(ride): use effort metrics for moving time
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/cli.go | 8 | ||||
| -rw-r--r-- | cli/cli_test.go | 22 |
2 files changed, 26 insertions, 4 deletions
@@ -135,7 +135,7 @@ func runBacktest(db *sql.DB) error { fmt.Fprintf(table, "p%g\t%.1f\n", p, distribution[p]) } table.Flush() - slog.Info("Moving time backtest", "rides", len(samples), "mean_err_pct", meanAbsErr(absErrors), "stderr_pct", stdErrAbsErr(absErrors)) + slog.Info("Moving time backtest", "rides", len(samples), "mean_err_pct", math.Round(meanAbsErr(absErrors)*10)/10, "stderr_pct", math.Round(stdErrAbsErr(absErrors)*10)/10) return nil } @@ -144,7 +144,7 @@ func meanAbsErr(absErrors []float64) float64 { for _, err := range absErrors { sum += err } - return math.Round(sum/float64(len(absErrors))*10) / 10 + return sum / float64(len(absErrors)) } func stdErrAbsErr(absErrors []float64) float64 { @@ -154,7 +154,7 @@ func stdErrAbsErr(absErrors []float64) float64 { sumSquares += (err - mean) * (err - mean) } variance := sumSquares / float64(len(absErrors)-1) - return math.Round(math.Sqrt(variance/float64(len(absErrors)))*10) / 10 + return math.Sqrt(variance / float64(len(absErrors))) } func errorDistribution(absErrors []float64, percentiles []float64) map[float64]float64 { @@ -169,7 +169,7 @@ func errorDistribution(absErrors []float64, percentiles []float64) map[float64]f if index >= len(sorted) { index = len(sorted) - 1 } - distribution[p] = math.Round(sorted[index]*10) / 10 + distribution[p] = sorted[index] } return distribution } diff --git a/cli/cli_test.go b/cli/cli_test.go new file mode 100644 index 0000000..8290bce --- /dev/null +++ b/cli/cli_test.go @@ -0,0 +1,22 @@ +package cli + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBacktestStatsUseUnroundedSamples(t *testing.T) { + absErrors := []float64{0, 0.1, 0.1} + + assert.InDelta(t, 1.0/15, meanAbsErr(absErrors), 1e-12) + assert.InDelta(t, 1.0/30, stdErrAbsErr(absErrors), 1e-12) +} + +func TestErrorDistributionUsesNearestRank(t *testing.T) { + distribution := errorDistribution([]float64{1, 2, 3, 4}, []float64{50, 75, 99}) + + assert.Equal(t, 2.0, distribution[50]) + assert.Equal(t, 3.0, distribution[75]) + assert.Equal(t, 4.0, distribution[99]) +} |
