Skip to main content

logo

Table of Contents
  1. About The Project
  2. Installation
  3. Getting Started
  4. Contributing
  5. License
  6. Reference

About The Project

Introduction

statespace is an automated portfolio construction process using advanced optuna fine-tuning techniques.

optuna is an automatic hyperparameter optimization software framework, particularly designed for machine learning. It features an imperative, define-by-run style user API. Thanks to our define-by-run API, the code written with Optuna enjoys high modularity, and the user of Optuna can dynamically construct the search spaces for the hyperparameters.

  • Eager search spaces: Automated search for optimal hyperparameters using Python conditionals, loops, and syntax
  • State-of-the-art algorithms: Efficiently search large spaces and prune unpromising trials for faster results
  • Easy parallelization: Parallelize hyperparameter searches over multiple threads or processes without modifying code

statespace is designed to automatically optimize portfolio hyper-parameters base on a configuration file.

(back to top)

Why Optuna?

Optuna enables efficient hyperparameter optimization by adopting state-of-the-art algorithms for sampling hyperparameters and pruning efficiently unpromising trials.

  • Sampling Algorithms: Samplers basically continually narrow down the search space using the records of suggested parameter values and evaluated objective values, leading to an optimal search space which giving off parameters leading to better objective values. optuna provides the following sampling algorithms:

    • Grid Search
    • Random Search
    • Tree-structured Parzen Estimator algorithm
    • CMA-ES based algorithm
    • Gaussian process-based algorithm
    • Algorithm to enable partial fixed parameters
    • Nondominated Sorting Genetic Algorithm II
    • A Quasi Monte Carlo sampling algorithm
  • Pruning Algorithms: Pruners automatically stop unpromising trials at the early stages of the training (a.k.a., automated early-stopping). Optuna provides the following pruning algorithms:

    • Median pruning algorithm
    • Non-pruning algorithm
    • Algorithm to operate pruner with tolerance
    • Algorithm to prune specified percentile of trials
    • Asynchronous Successive Halving algorithm
    • Hyperband algorithm
    • Threshold pruning algorithm
    • A pruning algorithm based on Wilcoxon signed-rank test

More information could be found in the Official Documentation.

Built With

  • optuna = "^3.6.1"
  • numpy = "^1.26.4"
  • pandas = "^2.2.2"
  • plotly = "^5.22.0"

(back to top)

Installation

$ pip install python-statespace

(back to top)

Getting Started

Follow these steps to get started with developing an investment strategy using the statespace framework.

Prerequisites

Make sure you have sklearn installed to follow this example:

$ pip install scikit-learn

Steps to Get Started

  • Develop an Investment Strategy
  • Create a Custom Objective Object
  • Set Up a Configuration File with Hyperparameters
  • Execute the Trials
  • Analyze the Results
  • Visualize

Example

In this example, we create a simple sklearn pipeline with a processor and a regressor.

Import Required Modules

>>> from statespace.base import BaseStudy, Listed
>>> from statespace.decorators import run_study

Note: sklearn imports are not shown here. Please see our running examples in the examples folder for more details.

Develop an Investment Strategy

>>> def strategy(estimator: BaseEstimator, preprocessor: BaseEstimator) -> Pipeline:
...     return make_pipeline(preprocessor, estimator)

Create a Custom Objective Object

We then create a custom objective MyCustomObjective to minimize the mean squared error on the validation set:

>>> class MyCustomObjective(BaseStudy):
...     @run_study
...     def objective(self, trial: Trial) -> float:
...         X_train, X_test, y_train, y_test = train_test_split(*self.data, test_size=0.33)
...         pred = self.model.fit(y_train, X_train).predict(y_test)
...         return mean_squared_error(y_test, pred)

Set Up a Configuration File with Hyperparameters

>>> config = {
...     'preprocessor': Listed([MinMaxScaler(), RobustScaler(), StandardScaler()]),
...     'estimator':    Listed([LinearRegression(), Ridge(), Lasso(), ElasticNet()]),
... }

Execute the Trials

>>> custom_model = MyCustomObjective(config, strategy, X, y)
>>> model = custom_model.execute(n_trials=20)
# A new study created in memory with name: statespace

Analyze Results

Get best parameters

>>> print(model.best_trial.params)
# {'preprocessor': MinMaxScaler(), 'estimator': ElasticNet()}

Get best value

>>> print(model.best_value)
# 0.9758159549070534.

Visualize

>>> from optuna import visualization

Contour Plot

>>> fig = visualization.plot_contour(model, params=["estimator", "preprocessor"])
>>> fig.show()

chart-1

Hyperparameter Importance

>>> fig = visualization.plot_param_importances(model)
>>> fig.show()

chart-2

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the BSD-3 License. See LICENSE.txt for more information.

(back to top)

Reference

  • Takuya Akiba, Shotaro Sano, Toshihiko Yanase, Takeru Ohta, and Masanori Koyama. 2019.
  • Optuna: A Next-generation Hyperparameter Optimization Framework. In KDD.

Metadata

Release files for python-statespace 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-statespace 0.1.0
File Size Uploaded
python_statespace-0.1.0.tar.gz 23.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-statespace 0.1.0
File Interpreter ABI Platform
python_statespace-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 48.6 kB

Release files / python_statespace-0.1.0.tar.gz

Download URL python_statespace-0.1.0.tar.gz
Size 23.4 kB
Tags Source
SHA-256 checksum
How to use checksums
27ee44cba069ca3873b422d8c3c65bb6d11821528913386a63979f23f450fee4
BLAKE2b-256 checksum
How to use checksums
3a52de82c820441bf2f2c175962281dfe5ba4151de30575ff465abb5a694822a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.11.6 Darwin/21.6.0

Release files / python_statespace-0.1.0-py3-none-any.whl

Download URL python_statespace-0.1.0-py3-none-any.whl
Size 25.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d5c109434abc3a8e1d19ff756e08a2059a7a9ed187218a9e3e4b66774e2ffa0e
BLAKE2b-256 checksum
How to use checksums
609b4acfe31f41300373889c2999464bab9d3074a7ee16ec6d89ee10a78fbbe6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.11.6 Darwin/21.6.0

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page