Skip to content
This repository has been archived by the owner on Mar 18, 2023. It is now read-only.

Commit

Permalink
🚧 Web: transitioning from the intervals to the posterior distributions
Browse files Browse the repository at this point in the history
  • Loading branch information
eigenein committed Sep 29, 2022
1 parent 0d4aa04 commit 663c237
Show file tree
Hide file tree
Showing 9 changed files with 29 additions and 218 deletions.
34 changes: 11 additions & 23 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ ahash = "0.8.0"
anyhow = "1.0.56"
async-compression = { version = "0.3.14", features = ["zstd"] }
async-trait = "0.1.57"
bpci = "0.1.0-beta.7"
chrono = { version = "0.4.19" }
chrono-humanize = "0.2.1"
clap = { version = "3.2.10", features = ["cargo", "derive", "env"] }
Expand Down
1 change: 0 additions & 1 deletion src/math.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
pub mod traits;
pub mod z_level;

#[allow(dead_code)]
#[inline]
Expand Down
26 changes: 0 additions & 26 deletions src/math/traits.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
use bpci::{BoundedInterval, NSuccessesSample, WilsonScore};
use statrs::distribution::Beta;

use crate::Result;
Expand Down Expand Up @@ -31,25 +30,9 @@ pub trait DamageDealt {
fn damage_dealt(&self) -> u64;
}

pub trait SurvivalRatioInterval {
fn survival_ratio_interval(&self, z_level: f64) -> Result<BoundedInterval<f64>>;
}

impl<T: NBattles + NSurvivedBattles> SurvivalRatioInterval for T {
fn survival_ratio_interval(&self, z_level: f64) -> Result<BoundedInterval<f64>> {
let sample = NSuccessesSample::new(self.n_battles(), self.n_survived_battles())?;
Ok(sample.wilson_score_with_cc(z_level))
}
}

pub trait VictoryRatio {
fn victory_ratio(&self) -> f64;

#[deprecated]
fn posterior_victory_probability(&self) -> f64;

fn victory_ratio_interval(&self, z_level: f64) -> Result<BoundedInterval<f64>>;

fn posterior_victory_ratio_distribution(&self) -> Result<Beta>;
}

Expand All @@ -58,15 +41,6 @@ impl<T: NBattles + NWins> VictoryRatio for T {
self.n_wins() as f64 / self.n_battles() as f64
}

fn posterior_victory_probability(&self) -> f64 {
self.n_posterior_wins() / self.n_posterior_battles()
}

fn victory_ratio_interval(&self, z_level: f64) -> Result<BoundedInterval<f64>> {
let sample = NSuccessesSample::new(self.n_battles(), self.n_wins())?;
Ok(sample.wilson_score_with_cc(z_level))
}

fn posterior_victory_ratio_distribution(&self) -> Result<Beta> {
Ok(Beta::new(
self.n_posterior_wins(),
Expand Down
117 changes: 0 additions & 117 deletions src/math/z_level.rs

This file was deleted.

18 changes: 8 additions & 10 deletions src/web/views/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ use statrs::statistics::Distribution;

use self::damage_item::DamageItem;
use self::display_preferences::UpdateDisplayPreferences;
use self::interval_item::IntervalItem;
use self::partials::*;
use self::path::PathSegments;
use self::percentage_item::PercentageItem;
Expand All @@ -33,7 +32,6 @@ use crate::{database, wargaming};

mod damage_item;
mod display_preferences;
mod interval_item;
mod partials;
mod path;
mod percentage_item;
Expand Down Expand Up @@ -416,7 +414,7 @@ pub async fn get(
div.container {
@if view_model.stats_delta.rating.n_battles != 0 {
div.columns.is-multiline.has-background-warning-light id="rating-columns" {
div.column."is-4-tablet"."is-4-desktop"."is-3-widescreen" {
div.column."is-5-tablet"."is-4-desktop"."is-3-widescreen" {
div.card {
header.card-header {
p.card-header-title {
Expand Down Expand Up @@ -486,7 +484,7 @@ pub async fn get(
}
}

div.column."is-3-tablet"."is-3-desktop"."is-2-widescreen" {
div.column."is-4-tablet"."is-3-desktop"."is-2-widescreen" {
div.card {
header.card-header {
p.card-header-title {
Expand Down Expand Up @@ -517,7 +515,7 @@ pub async fn get(
}
}

div.column."is-7-tablet"."is-6-desktop"."is-4-widescreen" {
div.column."is-6-tablet"."is-4-desktop" {
div.card {
header.card-header {
p.card-header-title {
Expand All @@ -542,9 +540,9 @@ pub async fn get(
}
div.level-item.has-text-centered {
div {
p.heading { (locale.text("title-interval")?) }
p.heading { (locale.text("title-posterior-masculine")?) }
p.title.is-white-space-nowrap {
(IntervalItem(view_model.stats_delta.rating.victory_ratio_interval(view_model.preferences.confidence_z_level)?))
(PercentageItem::from(view_model.stats_delta.rating.posterior_victory_ratio_distribution()?.mean().unwrap()))
}
}
}
Expand Down Expand Up @@ -676,7 +674,7 @@ pub async fn get(
div.column."is-6-tablet"."is-4-desktop" {
@let posterior_victory_ratio_distribution = view_model.stats_delta.random.posterior_victory_ratio_distribution()?;
@let posterior_victory_ratio = posterior_victory_ratio_distribution.mean().unwrap();
@let thumbs_down_probability = posterior_victory_ratio_distribution.cdf(view_model.target_victory_ratio);
@let thumbs_down_probability = posterior_victory_ratio_distribution.cdf(view_model.preferences.target_victory_ratio);
div
.card
.has-background-danger-light[thumbs_down_probability > view_model.preferences.confidence_level]
Expand Down Expand Up @@ -791,7 +789,7 @@ pub async fn get(
@for tank in &view_model.stats_delta.tanks {
(render_tank_tr(
tank,
view_model.target_victory_ratio,
view_model.preferences.target_victory_ratio,
view_model.preferences.confidence_level,
&locale,
)?)
Expand Down Expand Up @@ -821,7 +819,7 @@ pub async fn get(
div.navbar-item.has-dropdown.has-dropdown-up.is-hoverable {
a.navbar-link {
span.icon.has-text-info { i.fa-solid.fa-percentage {} }
(Float::from(100.0 * view_model.target_victory_ratio).precision(2))
(Float::from(100.0 * view_model.preferences.target_victory_ratio).precision(2))
span.has-text-grey { "%" }
}
div.navbar-dropdown {
Expand Down
Loading

0 comments on commit 663c237

Please sign in to comment.