Skip to content

ppsds 0.0.2 (private beta)

Pre-release
Pre-release

Choose a tag to compare

@Xuzerken Xuzerken released this 19 Oct 06:21
· 4 commits to main since this release

A private beta, not on PyPI. The second beta: the package stops being only about DRPP. DRPP
answers what can a predictor guarantee when the model is uncertain — a lower bound. This release
adds the other side of that question, how well could anything predict a system known exactly —
an upper bound — and a way to feel the difference before reading any of it. It also rebuilds the
documentation around the question of who each page is for.

Added

  • ppsds.predictability — the epsilon-logarithm score's reference values:
    predictability_upper_bound (the best expected score any predictor could reach, a property of
    the system alone), approximation_value (the O(epsilon) approximation for a given
    predictor), differential_entropy / cross_entropy, and trajectory aggregation
    (cumulative_average, across_trajectories).
  • EpsilonLogarithmScore — the neighbourhood scoring rule, replacing the previous zero-caller
    stub. It is vectorised, callable, and dispatches on the law it is given: logpdf at
    epsilon = 0, a box_integral method for pmfs, a closed form for diagonal Gaussians, and CDF
    inclusion-exclusion as the general fallback. These paths are tested against each other, not
    against stored constants.
  • ppsds.numerics.atom_pmf.AtomPmf — a predictive law as weighted atoms. Its support need not
    contain the true distribution's, which is the point: under the neighbourhood score a sparse
    pmf is a usable prediction, while under the ordinary logarithm score it is -inf almost
    surely.
  • ppsds.probabilistic_predictor.pmf — a second kind of predictor beside drpp:
    StaticAtomPmfPredictor and DriftShiftedAtomPmfPredictor, which predict with a pmf you
    supply rather than one a model derives.
  • ppsds.dynamics.known_sds.AdditiveDriftSds and ppsds.environment.KnownSdsEnv — a system that
    is known exactly (drift plus a named noise law, non-Gaussian included) and a gymnasium
    environment that steps it. Env still serves scene 2; KnownSdsEnv is the exception.
  • Examples reproducing the predictability paper's figure (examples/understand_predictability/) and
    running your own pmf bets as an experiment (experiments/pmf_betting/).
  • An interactive page at https://xuzerken.github.io/ppsds/examples/understand_ppsds_by_pmf_betting/ that scores a hand of bets live,
    and a README animation of it. The page replays trajectories exported from
    experiments/pmf_betting/presets.py, and checks its own JavaScript against vectors computed by
    ppsds on every load.
  • EpsilonLogarithmScore, AtomPmf, the pmf predictors and the predictability functions are now
    re-exported from the top level.
  • docs/assets/map.png — a route map across the four sections, used by the README, the site home
    and tutorials/map.md.
  • docs/assets/paper-drpp.png and docs/assets/paper-predictability.png — each paper's own
    vector figure rasterised separately for its Research page.

Changed

  • The documentation site is organised as four kinds of node. Home, then Examples (stories
    you can run), Experiments (the same questions at paper scale), Research (the common
    preliminaries and one page per paper, each with its own citation), Tutorials (topics treated
    on their own terms), and API. The old flat shelf (Concepts, Predictability, Examples,
    Developer Guide, Citation) is gone; concepts.md became the Research preliminaries and the
    separate citation page was retired because every paper page now ends with its citation.
  • The batch experiments moved out of examples/ into experiments/:
    experiments/drpp/, experiments/pmf_betting/ and experiments/predictability/. Each example
    and experiment directory now carries its own environment.yml, so one page can be run without
    installing the rest. examples/understand_ppsds_by_pmf_betting/ keeps its README: its runnable
    front is the no-install game page.
  • The README sells routes, not a page list. It opens with a two-column game block (the
    animation beside the rules that map onto the package), a one-row-per-reader entry table, and
    cross-section routes through Examples, Experiments, Research and Tutorials. The old
    The examples and A predictor on your own system sections were removed: both duplicated pages
    the site now owns.
  • The citation and licence sections were merged; contributing is a reader type in the entry table
    rather than a separate section.

Notes

  • No number moved. The DRPP experiment was compared against the pre-move commit with
    tools/ab_compare.py; every compared array is bit-identical.
  • The epsilon-logarithm score is discontinuous at epsilon = 0, and this is a property of
    the definition rather than an artefact: at exactly zero it is log p(x), while for any
    epsilon > 0 it carries a d log(2 epsilon) volume term and runs to -inf as epsilon
    shrinks. Subtract that term to recover the ordinary logarithm score; do not take a limit.
  • multivariate_uniform gained a batch-aware pdf / cdf and an optional rng for rvs. The
    default rvs path is unchanged, and the DRPP numbers are bit-identical.