Enhance your portfolio construction process using advanced Optuna fine-tuning techniques.
Project description
Table of Contents
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.
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"
Installation
$ pip install python-statespace
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()
Hyperparameter Importance
>>> fig = visualization.plot_param_importances(model)
>>> fig.show()
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!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the BSD-3 License. See LICENSE.txt
for more information.
Reference
- Takuya Akiba, Shotaro Sano, Toshihiko Yanase, Takeru Ohta, and Masanori Koyama. 2019.
- Optuna: A Next-generation Hyperparameter Optimization Framework. In KDD.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file python_statespace-0.1.0.tar.gz
.
File metadata
- Download URL: python_statespace-0.1.0.tar.gz
- Upload date:
- Size: 23.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.6 Darwin/21.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27ee44cba069ca3873b422d8c3c65bb6d11821528913386a63979f23f450fee4 |
|
MD5 | 786b0e510bfca17a5bb14dda6cd90327 |
|
BLAKE2b-256 | 3a52de82c820441bf2f2c175962281dfe5ba4151de30575ff465abb5a694822a |
File details
Details for the file python_statespace-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: python_statespace-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.11.6 Darwin/21.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5c109434abc3a8e1d19ff756e08a2059a7a9ed187218a9e3e4b66774e2ffa0e |
|
MD5 | a80c5b45b0383bf0237568c97dc02a82 |
|
BLAKE2b-256 | 609b4acfe31f41300373889c2999464bab9d3074a7ee16ec6d89ee10a78fbbe6 |