Indicators and information gain
An indicator is a resolvable event that changes a forecast for the ultimate outcome. Elicit three quantities: its chance c, the ultimate outcome’s probability if it occurs a, and that probability if it does not b.
The implied prior is u = c*a + (1-c)*b. Compare u to the stated prior before ranking the indicator. A dramatic conditional branch does not by itself make a coherent model.
extern crate supercast;
use supercast::{Probability as P, decompose::Indicator};
let indicator = Indicator {
chance: P::new(0.5)?,
if_yes: P::new(0.8)?,
if_no: P::new(0.3)?,
};
indicator.check(P::new(0.55)?, 1e-12)?;
assert!(indicator.information_gain() > 0.13);
assert_eq!(indicator.sensitivity(), [0.5, 0.5, 0.5]);
Ok::<(), supercast::Error>(())
Indicator::check rejects an incoherent stated prior using an explicit tolerance. It does not silently repair the beliefs. If the analyst prefers the prior, revisit the branch assumptions; if the branches are better supported, explain a prior revision.
Entropy reduction
Bernoulli entropy is h(p) = -p*ln(p) - (1-p)*ln(1-p), with endpoint entropy zero. Expected information gain is:
IG = h(u) - c*h(a) - (1-c)*h(b)
The result is in nats. An indicator with identical branches provides zero information. A perfect revelation of the target removes all prior entropy. A striking but extremely unlikely branch may have little expected value.
The returned sensitivity vector is ordered (chance, if_yes, if_no) and equals (a-b, c, 1-c). It identifies which elicited assumptions have the greatest local effect on the implied prior.
Information and decisions
Entropy reduction is not the same as decision value. An indicator can change a probability substantially while leaving the best action unchanged. Use value of information when deciding whether research is worth its cost.
These branches express conditional association. They do not establish the causal effect of intervening on the indicator. An event that predicts a product delay is not necessarily a lever that prevents it.
The current primitive is a two-branch model. More elaborate trees can be assembled from coherent mixtures, but their branch conditions and shared causes must remain explicit. The library does not infer a causal graph from a sequence of indicators.