Skip to main content

Multivariate Outlier Detection for Solar Photovoltaic Systems

Project description

PYMOD-Outliers

Multivariate Outlier Detection for Solar Photovoltaic Systems

Python 3.7+ License: MIT

Overview

PYMOD-Outliers is a comprehensive Python library for detecting outliers in solar photovoltaic (PV) system data. It combines multiple statistical and machine learning methods to identify anomalous measurements in GHI (Global Horizontal Irradiance) and power output data.

Features

  • Physical Validation: Filters impossible GHI-Power combinations
  • Statistical Analysis: Z-score and IQR-based outlier detection
  • Clustering: DBSCAN algorithm for spatial pattern recognition
  • Boundary Construction: Linear interpolation to build efficiency curves
  • Real-time Classification: Validate new data points against learned boundaries

Installation

pip install pymod-outliers

Quick Start

import pandas as pd
from pymod_outliers import detect_outliers

# Load your solar PV data
data = pd.DataFrame({
    'GHI': [...],           # Global Horizontal Irradiance (W/m²)
    'Power': [...],         # Active Power output (W)
    'Version': [...],       # Panel version/identifier
    'Rating': [...]         # Panel rated power (W)
})

# Detect outliers
boundaries, inliers = detect_outliers(
    data1=data,
    Version_column='Version',
    GHI_column='GHI',
    Power_column='Power',
    Rating_column='Rating',
    eps=[0.1, 0.2, 0.3],    # DBSCAN epsilon values to test
    min_s=[5, 10, 15]       # DBSCAN min_samples values to test
)

# Get clean data
clean_data = data.loc[inliers]
print(f"Detected {len(inliers)} inliers out of {len(data)} total points")

Detection Pipeline

PYMOD-Outliers uses a 6-step pipeline:

  1. Physical Filtering (ghi_p_zeros): Remove impossible measurements

    • GHI ≥ 200 W/m² with Power = 0 (panel malfunction)
    • GHI = 0 with Power > 0 (measurement error)
  2. Z-Score Analysis (z_scores): Statistical outlier detection

    • Bins data by GHI intervals
    • Applies IQR filtering within each bin
  3. DBSCAN Clustering (dbscan_func): Spatial pattern recognition

    • Identifies dense regions of normal operation
    • Separates outliers based on GHI-Power relationships
  4. Boundary Construction (interpolation_func): Build efficiency curves

    • Creates upper/lower power limits per GHI interval
    • Uses linear interpolation between intervals
  5. High Irradiance Validation (linear_interpol): Handle edge cases

    • Validates points at GHI ≥ 1000 W/m²
    • Accounts for temperature-induced efficiency drops
  6. Real-time Classification (check_inliers_outliers): Classify new points

    • Uses learned boundaries to validate new measurements
    • Returns 0 (inlier) or -1 (outlier)

API Reference

Main Functions

detect_outliers(data1, Version_column, GHI_column, Power_column, Rating_column, eps, min_s)

Complete outlier detection pipeline.

Parameters:

  • data1 (pd.DataFrame): Raw solar data
  • Version_column (str): Column name for panel version
  • GHI_column (str): Column name for GHI measurements
  • Power_column (str): Column name for power output
  • Rating_column (str): Column name for panel rated power
  • eps (list): DBSCAN epsilon values to test
  • min_s (list): DBSCAN min_samples values to test

Returns:

  • tuple: (boundaries DataFrame, list of inlier indices)

check_inliers_outliers(df_borders, row, pv_power, GHI_column, Power_column, Version_column)

Classify a single data point using learned boundaries.

Parameters:

  • df_borders (pd.DataFrame): Boundary coefficients from detect_outliers()
  • row (pd.Series): Data point to classify
  • pv_power (float): Power value to check
  • GHI_column (str): Column name for GHI
  • Power_column (str): Column name for power
  • Version_column (str): Column name for panel version

Returns:

  • int: 0 (inlier) or -1 (outlier)

Use Cases

  • Data Quality Control: Clean historical PV system data
  • Real-time Monitoring: Detect sensor malfunctions or anomalies
  • Performance Analysis: Identify underperforming panels
  • Research: Prepare clean datasets for solar energy studies

Requirements

  • Python ≥ 3.7
  • numpy ≥ 1.19.0
  • pandas ≥ 1.1.0
  • scipy ≥ 1.5.0
  • scikit-learn ≥ 0.23.0
  • matplotlib ≥ 3.3.0

Citation

If you use PYMOD-Outliers in your research, please cite:

@software{pymod_outliers,
  author = {Basma, Saad and Bouada, Mohamed},
  title = {PYMOD-Outliers: Multivariate Outlier Detection for Solar PV Systems},
  year = {2026},
  version = {1.0.0}
}

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please contact the authors for contribution guidelines.

Support

For issues, questions, or suggestions, please contact the authors:

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

pymod_outliers-1.0.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file pymod_outliers-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pymod_outliers-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for pymod_outliers-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a5ebff9529bb85cd5f18853fef3e42da0236b8c1c92b798067bfb859c9e6dad2
MD5 84e5ef8f05cbeaff981ff2dc60606931
BLAKE2b-256 e847512a5060a0bf17664d2b1921d517ba3d0f2387e52539002b2c4b28ef0a69

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