Don't scale bridge IPs in analysis
This commit is contained in:
parent
e889cba878
commit
273aaab38d
|
@ -7,8 +7,6 @@ use std::{
|
||||||
collections::{BTreeMap, HashSet},
|
collections::{BTreeMap, HashSet},
|
||||||
};
|
};
|
||||||
|
|
||||||
const SCALE_BRIDGE_IPS: u32 = 8;
|
|
||||||
|
|
||||||
/// Provides a function for predicting which countries block this bridge
|
/// Provides a function for predicting which countries block this bridge
|
||||||
pub trait Analyzer {
|
pub trait Analyzer {
|
||||||
/// Evaluate open-entry bridge. Returns true if blocked, false otherwise.
|
/// Evaluate open-entry bridge. Returns true if blocked, false otherwise.
|
||||||
|
@ -71,7 +69,7 @@ pub fn blocked_in(
|
||||||
None => &new_map_binding,
|
None => &new_map_binding,
|
||||||
};
|
};
|
||||||
let bridge_ips_today = match today_info.get(&BridgeInfoType::BridgeIps) {
|
let bridge_ips_today = match today_info.get(&BridgeInfoType::BridgeIps) {
|
||||||
Some(&v) => v / SCALE_BRIDGE_IPS,
|
Some(&v) => v,
|
||||||
None => 0,
|
None => 0,
|
||||||
};
|
};
|
||||||
let negative_reports_today = match today_info.get(&BridgeInfoType::NegativeReports) {
|
let negative_reports_today = match today_info.get(&BridgeInfoType::NegativeReports) {
|
||||||
|
@ -98,7 +96,7 @@ pub fn blocked_in(
|
||||||
None => &new_map_binding,
|
None => &new_map_binding,
|
||||||
};
|
};
|
||||||
bridge_ips[i as usize] = match day_info.get(&BridgeInfoType::BridgeIps) {
|
bridge_ips[i as usize] = match day_info.get(&BridgeInfoType::BridgeIps) {
|
||||||
Some(&v) => v / SCALE_BRIDGE_IPS,
|
Some(&v) => v,
|
||||||
None => 0,
|
None => 0,
|
||||||
};
|
};
|
||||||
negative_reports[i as usize] = match day_info.get(&BridgeInfoType::NegativeReports)
|
negative_reports[i as usize] = match day_info.get(&BridgeInfoType::NegativeReports)
|
||||||
|
@ -264,7 +262,7 @@ impl NormalAnalyzer {
|
||||||
sum +=
|
sum +=
|
||||||
(var1[index] as f64 - var1_mean) * (var2[index] as f64 - var2_mean);
|
(var1[index] as f64 - var1_mean) * (var2[index] as f64 - var2_mean);
|
||||||
}
|
}
|
||||||
sum / var1.len() as f64
|
sum / (var1.len() - 1) as f64
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -287,7 +285,7 @@ impl Analyzer for NormalAnalyzer {
|
||||||
) -> bool {
|
) -> bool {
|
||||||
negative_reports_today > self.max_threshold
|
negative_reports_today > self.max_threshold
|
||||||
|| f64::from(negative_reports_today)
|
|| f64::from(negative_reports_today)
|
||||||
> self.scaling_factor * f64::from(bridge_ips_today) * SCALE_BRIDGE_IPS as f64
|
> self.scaling_factor * f64::from(bridge_ips_today)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Evaluate invite-only bridge based on last 30 days
|
/// Evaluate invite-only bridge based on last 30 days
|
||||||
|
@ -311,10 +309,11 @@ impl Analyzer for NormalAnalyzer {
|
||||||
let negative_reports_sd = sd_vec[1];
|
let negative_reports_sd = sd_vec[1];
|
||||||
|
|
||||||
let mvn = MultivariateNormal::new(mean_vec, cov_mat).unwrap();
|
let mvn = MultivariateNormal::new(mean_vec, cov_mat).unwrap();
|
||||||
if mvn.pdf(&DVector::from_vec(vec![
|
let pdf = mvn.pdf(&DVector::from_vec(vec![
|
||||||
bridge_ips_today as f64,
|
bridge_ips_today as f64,
|
||||||
negative_reports_today as f64,
|
negative_reports_today as f64,
|
||||||
])) < alpha
|
]));
|
||||||
|
if pdf < alpha
|
||||||
{
|
{
|
||||||
(negative_reports_today as f64) > negative_reports_mean + negative_reports_sd
|
(negative_reports_today as f64) > negative_reports_mean + negative_reports_sd
|
||||||
|| (bridge_ips_today as f64) < bridge_ips_mean - bridge_ips_sd
|
|| (bridge_ips_today as f64) < bridge_ips_mean - bridge_ips_sd
|
||||||
|
|
Loading…
Reference in New Issue