Open-source Python library designed to improve engineering practices and transparency in feature engineering.
Project description
Feature Fabrica
Feature Fabrica is an open-source Python library designed to improve engineering practices and transparency in feature engineering. It allows users to define features declaratively using YAML, manage dependencies between features, and apply complex transformations in a scalable and convenient manner.
By providing a structured approach to feature engineering, Feature Fabrica aims to save time, reduce errors, and enhance the transparency and reproducibility of your machine learning workflows. Whether you’re a data scientist working on small projects or an engineer managing large-scale pipelines, Feature Fabrica is designed to meet your needs.
Introduction
In machine learning and data science, feature engineering plays a crucial role in building effective models. However, managing complex feature dependencies and transformations can be challenging. Feature Fabrica aims to simplify and streamline this process by providing a structured way to define, manage, and transform features.
With Feature Fabrica, you can:
- Define features declaratively using YAML.
- Manage dependencies between features automatically.
- Apply and chain transformations to compute derived features.
- Validate feature values using Pydantic.
Key Features
- 📝 Declarative Feature Definitions: Define features, data types, and dependencies using a simple YAML configuration.
- 🔄 Transformations: Apply custom transformations to raw features to derive new features.
- 🔗 Dependency Management: Automatically handle dependencies between features.
- ✔️ Pydantic Validation: Ensure data types and values conform to expected formats.
- 🛡️ Fail-Fast with Beartype: Instantly catch type-related errors with
beartypeduring development, ensuring your transformations are robust and reliable. - 🚀 Scalability: Designed to scale from small projects to large machine learning pipelines.
- 🔧 Hydra Integration: Leverage Hydra for configuration management, enabling flexible and dynamic configuration of transformations.
Quick Start
🛠️ Install via pip
To install Feature Fabrica, simply run:
pip install feature-fabrica
Defining Features in YAML
Features are defined in a YAML file. Here’s an example:
feature_a:
description: "Raw feature A"
data_type: "float32"
feature_b:
description: "Raw feature B"
data_type: "float32"
feature_c:
description: "Derived feature C"
data_type: "float32"
dependencies: ["feature_a", "feature_b"]
transformation:
sum_fn:
_target_: feature_fabrica.transform.SumFn
iterable: ["feature_a", "feature_b"]
scale_feature:
_target_: feature_fabrica.transform.ScaleFeature
factor: 0.5
Creating and Using Transformations
You can define custom transformations by subclassing the Transformation class:
from typing import Union
import numpy as np
from beartype import beartype
from numpy.typing import NDArray
from feature_fabrica.transform import Transformation
NumericArray = Union[NDArray[np.floating], NDArray[np.int_]]
NumericValue = Union[np.floating, np.int_, float, int]
class ScaleFeature(Transformation):
def __init__(self, factor: float):
super().__init__()
self.factor = factor
@beartype
def execute(self, data: NumericArray | NumericValue) -> NumericArray | NumericValue:
return np.multiply(data, self.factor)
Compiling and Executing Features
To compile and execute features:
import numpy as np
from feature_fabrica.core import FeatureManager
data = {
"feature_a": np.array([10.0], dtype=np.float32),
"feature_b": np.array([20.0], dtype=np.float32),
}
feature_manager = FeatureManager(
config_path="../examples", config_name="basic_features"
)
results = feature_manager.compute_features(data)
print(results["feature_c"]) # 0.5 * (10 + 20) = 15.0
print(results.feature_c) # 0.5 * (10 + 20) = 15.0
Visualize Features and Dependencies
Track & trace Transformation Chains
import numpy as np
from feature_fabrica.core import FeatureManager
data = {
"feature_a": np.array([10.0], dtype=np.float32),
"feature_b": np.array([20.0], dtype=np.float32),
}
feature_manager = FeatureManager(
config_path="../examples", config_name="basic_features"
)
results = feature_manager.compute_features(data)
print(feature_manager.features.feature_c.get_transformation_chain())
# Transformation Chain: (Transformation: sum_fn, Value: 30.0 Time taken: 9.5367431640625e-07 seconds) -> (Transformation: scale_feature, Value: 15.0, Time taken: 9.5367431640625e-07 seconds)
Visualize Dependencies
from feature_fabrica.core import FeatureManager
feature_manager = FeatureManager(
config_path="../examples", config_name="basic_features"
)
feature_manager.get_visual_dependency_graph()
Contributing
We welcome contributions! If you have ideas for improvements or want to report issues, feel free to open a pull request or an issue on GitHub.
How to Contribute
- Fork the repository.
- Create a new branch (git checkout -b feature/your-feature-name).
- Commit your changes (git commit -m 'Add some feature').
- Push to the branch (git push origin feature/your-feature-name).
- Open a pull request.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file feature_fabrica-1.2.1.tar.gz.
File metadata
- Download URL: feature_fabrica-1.2.1.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0408872f6b44197445abbf59f171d53ef440d80e0865854155cef24f5ea0ab82
|
|
| MD5 |
20deaddf145efeed2c9b0a4600938cac
|
|
| BLAKE2b-256 |
5c3d6e48283b5afab2ef83c84bb24589aeaa203c2d3dfa48b1e8131ea0d90616
|
File details
Details for the file feature_fabrica-1.2.1-py3-none-any.whl.
File metadata
- Download URL: feature_fabrica-1.2.1-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55d8d231a04e379e14be578f4fba5d82efb69f1f741508bfb98c2d3000a3e5b6
|
|
| MD5 |
62c3d0fb61174bd36d7060c6ae10b2dc
|
|
| BLAKE2b-256 |
e5c458c2e99082c212d3f678881963f4bef8b1889621e59e1877eeb5ed8ba48b
|