Skip to main content

Single-factor evaluation/testing toolkit (pandas-first).

Project description

bagel-factor

A small, pandas-first toolkit for single-factor evaluation/testing.

Scope (by design)

This package focuses on:

  • canonical point-in-time data helpers ((date, asset) panel)
  • preprocessing transforms (clip / z-score / rank)
  • single-factor evaluation (IC/ICIR, quantile returns, long-short, coverage, turnover)

It intentionally does not implement multi-factor modeling or portfolio backtesting.

Install

pip install bagel-factor

Install (dev / from source)

This repo is managed with uv.

uv sync

Quickstart

1) Prepare a canonical panel

Most APIs expect a canonical panel:

  • pd.DataFrame
  • indexed by pd.MultiIndex with names ("date", "asset")
import pandas as pd
from bagelfactor.data import ensure_panel_index

raw = pd.DataFrame(
    {
        "date": ["2020-01-01", "2020-01-01"],
        "asset": ["A", "B"],
        "close": [10.0, 20.0],
        "alpha": [1.0, 2.0],
    }
)

panel = ensure_panel_index(raw)

2) (Optional) preprocess the factor

from bagelfactor.preprocess import Clip, Pipeline, Rank, ZScore

preprocess = Pipeline([
    Clip("alpha", lower=0.0, upper=2.0),
    ZScore("alpha"),
    Rank("alpha"),
])

3) Run single-factor evaluation

horizons supports multiple forward-return windows (tuple of positive integers).

from bagelfactor.single_factor import SingleFactorJob

res = SingleFactorJob.run(
    panel,
    factor="alpha",
    price="close",
    horizons=(1, 5, 20),
    n_quantiles=5,
    preprocess=preprocess,
)

ic_1d = res.ic[1]
qret_5d = res.quantile_returns[5]
long_short_20d = res.long_short[20]

Documentation

Reproducible example artifacts

examples/example.py is a script that generates deterministic artifacts used by docs/example.md:

  • inputs: examples/inputs/
  • outputs: examples/outputs/

Development

Run tests:

uv run pytest -q

License

MIT (see LICENSE).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bagel_factor-0.1.0.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bagel_factor-0.1.0-py3-none-any.whl (20.5 kB view details)

Uploaded Python 3

File details

Details for the file bagel_factor-0.1.0.tar.gz.

File metadata

  • Download URL: bagel_factor-0.1.0.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for bagel_factor-0.1.0.tar.gz
Algorithm Hash digest
SHA256 119cdf0f4c7062dde869ff667633a03a1c8e810353ef5a14993e6dd80c908277
MD5 ffee492e089b53f846bf5759c6bafef8
BLAKE2b-256 683a7399868af3409c06f81d650140e3b6c87038bfc5210572482ea1baa7d15a

See more details on using hashes here.

File details

Details for the file bagel_factor-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: bagel_factor-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 20.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for bagel_factor-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a06772ce2f8e7d30677e1b8e23412909d4ce439438668b94e76dc4db8e3d25ee
MD5 f308211930e94956a7c8106866acb3a5
BLAKE2b-256 d827b61de8ada75f9bc0621f57819623435e5ce7e52dc7983d9a3e3b5126b19c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page