tinyshift


Nametinyshift JSON
Version 1.1.1 PyPI version JSON
download
home_pageNone
SummaryA small toolbox for mlops
upload_time2025-11-04 15:39:25
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords mlops toolbox machine-learning
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # TinyShift
<p align="center">
  <img src="https://github.com/user-attachments/assets/34668d33-459d-4dc3-b598-342130bf7db3" alt="tinyshift_full_logo" width="400" height="400">
</p>
**TinyShift** is a lightweight, sklearn-compatible Python library designed for **data drift detection**, **outlier identification**, and **MLOps monitoring** in production machine learning systems. The library provides modular, easy-to-use tools for detecting when data distributions or model performance change over time, with comprehensive visualization capabilities.

For enterprise-grade solutions, consider [Nannyml](https://github.com/NannyML/nannyml).

## Features

- **Data Drift Detection**: Categorical and continuous data drift monitoring with multiple distance metrics
- **Outlier Detection**: **HBOS**, **PCA-based** and **SPAD** outlier detection algorithms  
- **Time Series Analysis**: Seasonality decomposition, trend analysis, and forecasting diagnostics

## Technologies Used

- **Python 3.10+** 
- **Scikit-learn 1.3.0+**
- **Pandas 2.3.0+** 
- **NumPy**
- **SciPy**
- **Statsmodels 0.14.5+**
- **Plotly 5.22.0+** (optional, for plotting)

## πŸ“¦ Installation

Install TinyShift using pip:

```bash
pip install tinyshift
```

### Development Installation

Clone and install from source:

```bash
git clone https://github.com/HeyLucasLeao/tinyshift.git
cd tinyshift
pip install -e .
```

## πŸ“– Quick Start

### 1. Categorical Data Drift Detection

TinyShift provides sklearn-compatible drift detectors that follow the familiar `fit()` and `score()` pattern:

```python
import pandas as pd
from tinyshift.drift import CatDrift

# Load your data
df = pd.read_csv("data.csv")
reference_data = df[df["date"] < '2024-07-01']
analysis_data = df[df["date"] >= '2024-07-01'] 

# Initialize and fit the drift detector
detector = CatDrift(
    freq="D",                    # Daily frequency
    func="chebyshev",           # Distance metric
    drift_limit="auto",         # Automatic threshold detection
    method="expanding"          # Comparison method
)

# Fit on reference data
detector.fit(reference_data)

# Score new data for drift
drift_scores = detector.predict(analysis_data)
print(drift_scores)
```

Available distance metrics for **categorical** data:
- `"chebyshev"`: Maximum absolute difference between distributions
- `"jensenshannon"`: Jensen-Shannon divergence  
- `"psi"`: Population Stability Index

### 2. Continuous Data Drift Detection

For numerical features, use the continuous drift detector:

```python
from tinyshift.drift import ConDrift

# Initialize continuous drift detector
detector = ConDrift(
    freq="W",                   # Weekly frequency  
    func="ws",                  # Wasserstein distance
    drift_limit="auto",
    method="expanding"
)

# Fit and score
detector.fit(reference_data)
drift_scores = detector.score(analysis_data)
```

### 3. Outlier Detection

TinyShift includes sklearn-compatible outlier detection algorithms:

```python
from tinyshift.outlier import SPAD, HBOS, PCAReconstructionError

# SPAD (Simple Probabilistic Anomaly Detector)
spad = SPAD(plus=True)
spad.fit(X_train)

outlier_scores = spad.decision_function(X_test)
outlier_labels = spad.predict(X_test)

# HBOS (Histogram-Based Outlier Score)
hbos = HBOS(dynamic_bins=True)
hbos.fit(X_train, nbins="fd")
scores = hbos.decision_function(X_test)

# PCA-based outlier detection
pca_detector = PCAReconstructionError()
pca_detector.fit(X_train)
pca_scores = pca_detector.decision_function(X_test)
```
### 4. Time Series Analysis and Diagnostics

TinyShift provides time series analysis capabilities:

```python
from tinyshift.plot import seasonal_decompose
from tinyshift.series import trend_significance, permutation_auto_mutual_information

# Seasonal decomposition with multiple periods
seasonal_decompose(
    time_series, 
    periods=[7, 365],  # Weekly and yearly patterns
    width=1200, 
    height=800
)

# Test for significant trends
trend_result = trend_significance(time_series, alpha=0.05)
print(f"Significant trend: {trend_result}")

# Stationary Analysis
fig = stationarity_analysis(time_series)
```

### 5. Advanced Modeling Tools

```python
from tinyshift.modelling import filter_features_by_vif
from tinyshift.stats import bootstrap_bca_interval

# Detect multicollinearity
mask = filter_features_by_vif(X, trehshold=5, verbose=True)
X.columns[mask]

# Bootstrap confidence intervals
confidence_interval = bootstrap_bca_interval(
    data, 
    statistic=np.mean, 
    alpha=0.05, 
    n_bootstrap=1000
)
```

## πŸ“ Project Structure

```
tinyshift/
β”œβ”€β”€ association_mining/          # Market basket analysis tools
β”‚   β”œβ”€β”€ analyzer.py             # Transaction pattern analysis
β”‚   └── encoder.py              # Data encoder
β”œβ”€β”€ drift/                      # Data drift detection 
β”‚   β”œβ”€β”€ base.py                 # Base drift detection classes  
β”‚   β”œβ”€β”€ categorical.py          # CatDrift for categorical features
β”‚   └── continuous.py           # ConDrift for numerical features
β”œβ”€β”€ examples/                   # Jupyter notebook examples
β”‚   β”œβ”€β”€ drift.ipynb            # Drift detection examples
β”‚   β”œβ”€β”€ outlier.ipynb          # Outlier detection demos
β”‚   β”œβ”€β”€ series.ipynb           # Time series analysis
β”‚   └── transaction_analyzer.ipynb
β”œβ”€β”€ modelling/                  # ML modeling utilities
β”‚   β”œβ”€β”€ multicollinearity.py   # VIF-based multicollinearity detection
β”‚   β”œβ”€β”€ residualizer.py        # Residualizer Feature
β”‚   └── scaler.py              # Custom scaling transformations
β”œβ”€β”€ outlier/                    # Outlier detection algorithms
β”‚   β”œβ”€β”€ base.py                 # Base outlier detection classes
β”‚   β”œβ”€β”€ hbos.py                 # Histogram-Based Outlier Score
β”‚   β”œβ”€β”€ pca.py                  # PCA-based outlier detection  
β”‚   └── spad.py                 # Simple Probabilistic Anomaly Detector
β”œβ”€β”€ plot/                       # Visualization capabilities  
β”‚   β”œβ”€β”€ correlation.py          # Correlation analysis plots
β”‚   └── diagnostic.py           # Time series diagnostics plots
β”œβ”€β”€ series/                     # Time series analysis tools
β”‚   β”œβ”€β”€ forecastability.py     # Forecast quality metrics
β”‚   β”œβ”€β”€ outlier.py             # Time series outlier detection
β”‚   └── stats.py               # Statistical analysis functions
└── stats/                      # Statistical utilities
    β”œβ”€β”€ bootstrap_bca.py        # Bootstrap confidence intervals
    β”œβ”€β”€ statistical_interval.py # Statistical interval estimation
    └── utils.py               # General statistical utilities
```

```
tinyshift
β”œβ”€β”€ LICENSE
β”œβ”€β”€ README.md
β”œβ”€β”€ poetry.lock
β”œβ”€β”€ pyproject.toml
β”œβ”€β”€ tinyshift
β”‚Β Β  β”œβ”€β”€ association_mining
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ analyzer.py
β”‚Β Β  β”‚Β Β  └── encoder.py
β”‚Β Β  β”œβ”€β”€ examples
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ outlier.ipynb
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ tracker.ipynb
β”‚Β Β  β”‚Β Β  └── transaction_analyzer.ipynb
β”‚Β Β  β”œβ”€β”€ modelling
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ multicollinearity.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ residualizer.py
β”‚Β Β  β”‚Β Β  └── scaler.py
β”‚Β Β  β”œβ”€β”€ outlier
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ base.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hbos.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pca.py
β”‚Β Β  β”‚Β Β  └── spad.py
β”‚Β Β  β”œβ”€β”€ plot
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ correlation.py
β”‚Β Β  β”‚Β Β  └── plot.py
β”‚Β Β  β”œβ”€β”€ series
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forecastability.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ outlier.py
β”‚Β Β  β”‚Β Β  └── stats.py
β”‚Β Β  β”œβ”€β”€ stats
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ bootstrap_bca.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ series.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ statistical_interval.py
β”‚Β Β  β”‚Β Β  └── utils.py
β”‚Β Β  β”œβ”€β”€ tests
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ test.pca.py
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ test_hbos.py
β”‚Β Β  β”‚Β Β  └── test_spad.py
β”‚Β Β  └── drift
β”‚Β Β      β”œβ”€β”€ __init__.py
β”‚Β Β      β”œβ”€β”€ base.py
β”‚Β Β      β”œβ”€β”€ categorical.py
β”‚Β Β      β”œβ”€β”€ continuous.py
```


### Development Setup

```bash
git clone https://github.com/HeyLucasLeao/tinyshift.git
cd tinyshift
pip install -e ".[all]"
```

## πŸ“‹ Requirements

- **Python**: 3.10+
- **Core Dependencies**: 
  - pandas (>2.3.0)
  - scikit-learn (>1.3.0) 
  - statsmodels (>=0.14.5)
- **Optional Dependencies**:
  - plotly (>5.22.0) - for visualization
  - kaleido (<=0.2.1) - for static plot export
  - nbformat (>=5.10.4) - for notebook support

## πŸ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## πŸ™ Acknowledgments

- Inspired by [Nannyml](https://github.com/NannyML/nannyml)


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "tinyshift",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "mlops, toolbox, machine-learning",
    "author": null,
    "author_email": "Lucas Le\u00e3o <heylucasleao@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/53/48/191e3a06bf53374fe01de369aaa088d6980bd1f604b61980fdf6d0840a6c/tinyshift-1.1.1.tar.gz",
    "platform": null,
    "description": "# TinyShift\n<p align=\"center\">\n  <img src=\"https://github.com/user-attachments/assets/34668d33-459d-4dc3-b598-342130bf7db3\" alt=\"tinyshift_full_logo\" width=\"400\" height=\"400\">\n</p>\n**TinyShift** is a lightweight, sklearn-compatible Python library designed for **data drift detection**, **outlier identification**, and **MLOps monitoring** in production machine learning systems. The library provides modular, easy-to-use tools for detecting when data distributions or model performance change over time, with comprehensive visualization capabilities.\n\nFor enterprise-grade solutions, consider [Nannyml](https://github.com/NannyML/nannyml).\n\n## Features\n\n- **Data Drift Detection**: Categorical and continuous data drift monitoring with multiple distance metrics\n- **Outlier Detection**: **HBOS**, **PCA-based** and **SPAD** outlier detection algorithms  \n- **Time Series Analysis**: Seasonality decomposition, trend analysis, and forecasting diagnostics\n\n## Technologies Used\n\n- **Python 3.10+** \n- **Scikit-learn 1.3.0+**\n- **Pandas 2.3.0+** \n- **NumPy**\n- **SciPy**\n- **Statsmodels 0.14.5+**\n- **Plotly 5.22.0+** (optional, for plotting)\n\n## \ud83d\udce6 Installation\n\nInstall TinyShift using pip:\n\n```bash\npip install tinyshift\n```\n\n### Development Installation\n\nClone and install from source:\n\n```bash\ngit clone https://github.com/HeyLucasLeao/tinyshift.git\ncd tinyshift\npip install -e .\n```\n\n## \ud83d\udcd6 Quick Start\n\n### 1. Categorical Data Drift Detection\n\nTinyShift provides sklearn-compatible drift detectors that follow the familiar `fit()` and `score()` pattern:\n\n```python\nimport pandas as pd\nfrom tinyshift.drift import CatDrift\n\n# Load your data\ndf = pd.read_csv(\"data.csv\")\nreference_data = df[df[\"date\"] < '2024-07-01']\nanalysis_data = df[df[\"date\"] >= '2024-07-01'] \n\n# Initialize and fit the drift detector\ndetector = CatDrift(\n    freq=\"D\",                    # Daily frequency\n    func=\"chebyshev\",           # Distance metric\n    drift_limit=\"auto\",         # Automatic threshold detection\n    method=\"expanding\"          # Comparison method\n)\n\n# Fit on reference data\ndetector.fit(reference_data)\n\n# Score new data for drift\ndrift_scores = detector.predict(analysis_data)\nprint(drift_scores)\n```\n\nAvailable distance metrics for **categorical** data:\n- `\"chebyshev\"`: Maximum absolute difference between distributions\n- `\"jensenshannon\"`: Jensen-Shannon divergence  \n- `\"psi\"`: Population Stability Index\n\n### 2. Continuous Data Drift Detection\n\nFor numerical features, use the continuous drift detector:\n\n```python\nfrom tinyshift.drift import ConDrift\n\n# Initialize continuous drift detector\ndetector = ConDrift(\n    freq=\"W\",                   # Weekly frequency  \n    func=\"ws\",                  # Wasserstein distance\n    drift_limit=\"auto\",\n    method=\"expanding\"\n)\n\n# Fit and score\ndetector.fit(reference_data)\ndrift_scores = detector.score(analysis_data)\n```\n\n### 3. Outlier Detection\n\nTinyShift includes sklearn-compatible outlier detection algorithms:\n\n```python\nfrom tinyshift.outlier import SPAD, HBOS, PCAReconstructionError\n\n# SPAD (Simple Probabilistic Anomaly Detector)\nspad = SPAD(plus=True)\nspad.fit(X_train)\n\noutlier_scores = spad.decision_function(X_test)\noutlier_labels = spad.predict(X_test)\n\n# HBOS (Histogram-Based Outlier Score)\nhbos = HBOS(dynamic_bins=True)\nhbos.fit(X_train, nbins=\"fd\")\nscores = hbos.decision_function(X_test)\n\n# PCA-based outlier detection\npca_detector = PCAReconstructionError()\npca_detector.fit(X_train)\npca_scores = pca_detector.decision_function(X_test)\n```\n### 4. Time Series Analysis and Diagnostics\n\nTinyShift provides time series analysis capabilities:\n\n```python\nfrom tinyshift.plot import seasonal_decompose\nfrom tinyshift.series import trend_significance, permutation_auto_mutual_information\n\n# Seasonal decomposition with multiple periods\nseasonal_decompose(\n    time_series, \n    periods=[7, 365],  # Weekly and yearly patterns\n    width=1200, \n    height=800\n)\n\n# Test for significant trends\ntrend_result = trend_significance(time_series, alpha=0.05)\nprint(f\"Significant trend: {trend_result}\")\n\n# Stationary Analysis\nfig = stationarity_analysis(time_series)\n```\n\n### 5. Advanced Modeling Tools\n\n```python\nfrom tinyshift.modelling import filter_features_by_vif\nfrom tinyshift.stats import bootstrap_bca_interval\n\n# Detect multicollinearity\nmask = filter_features_by_vif(X, trehshold=5, verbose=True)\nX.columns[mask]\n\n# Bootstrap confidence intervals\nconfidence_interval = bootstrap_bca_interval(\n    data, \n    statistic=np.mean, \n    alpha=0.05, \n    n_bootstrap=1000\n)\n```\n\n## \ud83d\udcc1 Project Structure\n\n```\ntinyshift/\n\u251c\u2500\u2500 association_mining/          # Market basket analysis tools\n\u2502   \u251c\u2500\u2500 analyzer.py             # Transaction pattern analysis\n\u2502   \u2514\u2500\u2500 encoder.py              # Data encoder\n\u251c\u2500\u2500 drift/                      # Data drift detection \n\u2502   \u251c\u2500\u2500 base.py                 # Base drift detection classes  \n\u2502   \u251c\u2500\u2500 categorical.py          # CatDrift for categorical features\n\u2502   \u2514\u2500\u2500 continuous.py           # ConDrift for numerical features\n\u251c\u2500\u2500 examples/                   # Jupyter notebook examples\n\u2502   \u251c\u2500\u2500 drift.ipynb            # Drift detection examples\n\u2502   \u251c\u2500\u2500 outlier.ipynb          # Outlier detection demos\n\u2502   \u251c\u2500\u2500 series.ipynb           # Time series analysis\n\u2502   \u2514\u2500\u2500 transaction_analyzer.ipynb\n\u251c\u2500\u2500 modelling/                  # ML modeling utilities\n\u2502   \u251c\u2500\u2500 multicollinearity.py   # VIF-based multicollinearity detection\n\u2502   \u251c\u2500\u2500 residualizer.py        # Residualizer Feature\n\u2502   \u2514\u2500\u2500 scaler.py              # Custom scaling transformations\n\u251c\u2500\u2500 outlier/                    # Outlier detection algorithms\n\u2502   \u251c\u2500\u2500 base.py                 # Base outlier detection classes\n\u2502   \u251c\u2500\u2500 hbos.py                 # Histogram-Based Outlier Score\n\u2502   \u251c\u2500\u2500 pca.py                  # PCA-based outlier detection  \n\u2502   \u2514\u2500\u2500 spad.py                 # Simple Probabilistic Anomaly Detector\n\u251c\u2500\u2500 plot/                       # Visualization capabilities  \n\u2502   \u251c\u2500\u2500 correlation.py          # Correlation analysis plots\n\u2502   \u2514\u2500\u2500 diagnostic.py           # Time series diagnostics plots\n\u251c\u2500\u2500 series/                     # Time series analysis tools\n\u2502   \u251c\u2500\u2500 forecastability.py     # Forecast quality metrics\n\u2502   \u251c\u2500\u2500 outlier.py             # Time series outlier detection\n\u2502   \u2514\u2500\u2500 stats.py               # Statistical analysis functions\n\u2514\u2500\u2500 stats/                      # Statistical utilities\n    \u251c\u2500\u2500 bootstrap_bca.py        # Bootstrap confidence intervals\n    \u251c\u2500\u2500 statistical_interval.py # Statistical interval estimation\n    \u2514\u2500\u2500 utils.py               # General statistical utilities\n```\n\n```\ntinyshift\n\u251c\u2500\u2500 LICENSE\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 poetry.lock\n\u251c\u2500\u2500 pyproject.toml\n\u251c\u2500\u2500 tinyshift\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 association_mining\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 README.md\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 analyzer.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 encoder.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 examples\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 outlier.ipynb\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 tracker.ipynb\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 transaction_analyzer.ipynb\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 modelling\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 multicollinearity.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 residualizer.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 scaler.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 outlier\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 README.md\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 base.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 hbos.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 pca.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 spad.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 plot\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 correlation.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 plot.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 series\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 README.md\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 forecastability.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 outlier.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 stats.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 stats\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 bootstrap_bca.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 series.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 statistical_interval.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 utils.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 tests\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 test.pca.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 test_hbos.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 test_spad.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 drift\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 base.py\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 categorical.py\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 continuous.py\n```\n\n\n### Development Setup\n\n```bash\ngit clone https://github.com/HeyLucasLeao/tinyshift.git\ncd tinyshift\npip install -e \".[all]\"\n```\n\n## \ud83d\udccb Requirements\n\n- **Python**: 3.10+\n- **Core Dependencies**: \n  - pandas (>2.3.0)\n  - scikit-learn (>1.3.0) \n  - statsmodels (>=0.14.5)\n- **Optional Dependencies**:\n  - plotly (>5.22.0) - for visualization\n  - kaleido (<=0.2.1) - for static plot export\n  - nbformat (>=5.10.4) - for notebook support\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Inspired by [Nannyml](https://github.com/NannyML/nannyml)\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A small toolbox for mlops",
    "version": "1.1.1",
    "project_urls": null,
    "split_keywords": [
        "mlops",
        " toolbox",
        " machine-learning"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1081f62ec95fc8e1817df3caa6b640b7fb49c8adf9198cc6190f81d73dbea1e",
                "md5": "d8e89c4d787b16804f410b1c5e71defe",
                "sha256": "9fc7ed26a58c3d5aaa9dcce0bd7b6fd71da741a8df6032d95dc91f5ed94f257e"
            },
            "downloads": -1,
            "filename": "tinyshift-1.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d8e89c4d787b16804f410b1c5e71defe",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 66285,
            "upload_time": "2025-11-04T15:39:24",
            "upload_time_iso_8601": "2025-11-04T15:39:24.712629Z",
            "url": "https://files.pythonhosted.org/packages/e1/08/1f62ec95fc8e1817df3caa6b640b7fb49c8adf9198cc6190f81d73dbea1e/tinyshift-1.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5348191e3a06bf53374fe01de369aaa088d6980bd1f604b61980fdf6d0840a6c",
                "md5": "ffcc49f59273f90ac1c3b26353bc7847",
                "sha256": "9bc4d8a62647fb0cf622816e41ea09fe89b62cd3b86cbadfc6e7e8e5c9e8a9d3"
            },
            "downloads": -1,
            "filename": "tinyshift-1.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "ffcc49f59273f90ac1c3b26353bc7847",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 51250,
            "upload_time": "2025-11-04T15:39:25",
            "upload_time_iso_8601": "2025-11-04T15:39:25.866565Z",
            "url": "https://files.pythonhosted.org/packages/53/48/191e3a06bf53374fe01de369aaa088d6980bd1f604b61980fdf6d0840a6c/tinyshift-1.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-04 15:39:25",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "tinyshift"
}
        
Elapsed time: 3.60475s