Power equipment — transformers, cables, circuit breakers — fails with signs of wear weeks to months before an accident. Switching from preventive to predictive maintenance reduces costs by 20-30% and eliminates unplanned outages. On a site with 10 transformers, maintenance budget savings reach 4 million rubles per year, and the system payback period is less than 12 months.
An unplanned outage of a 110 kV transformer leads to fines, production downtime, and reputational losses. According to statistics, 70% of power transformer failures are related to insulation defects. These defects manifest 3-6 months before failure. Traditional diagnostic methods — periodic DGA (Dissolved Gas Analysis) measurements once a year — often miss rapid deterioration. Our AI system monitors DGA, partial discharges, and thermal regimes in real time, predicting failure with up to 90% accuracy.
Based on our project data, AI prediction reduces emergency outages by a factor of 4 compared to planned maintenance. At the same time, the system payback period is less than a year.
How AI Predicts Transformer Failure
DGA is the main indicator of oil condition. We use thresholds and gas ratios per the IEEE C57.104 standard to classify defects. Here's an example diagnostic code:
import numpy as np
dga_thresholds = {
'hydrogen_H2': {'warning': 150, 'alarm': 500},
'methane_CH4': {'warning': 75, 'alarm': 200},
'ethylene_C2H4': {'warning': 60, 'alarm': 150},
'ethane_C2H6': {'warning': 100, 'alarm': 200},
'acetylene_C2H2': {'warning': 2, 'alarm': 30},
'carbon_monoxide_CO': {'warning': 700, 'alarm': 1500},
'carbon_dioxide_CO2': {'warning': 10000, 'alarm': 15000}
}
def diagnose_transformer_dga(gas_ppm: dict) -> dict:
alarm_gases = []
for gas, value in gas_ppm.items():
if gas in dga_thresholds:
if value > dga_thresholds[gas]['alarm']:
alarm_gases.append({'gas': gas, 'value': value, 'level': 'alarm'})
elif value > dga_thresholds[gas]['warning']:
alarm_gases.append({'gas': gas, 'value': value, 'level': 'warning'})
ch4_h2 = gas_ppm.get('methane_CH4', 0) / (gas_ppm.get('hydrogen_H2', 1) + 1e-9)
c2h4_c2h6 = gas_ppm.get('ethylene_C2H4', 0) / (gas_ppm.get('ethane_C2H6', 1) + 1e-9)
c2h2_c2h4 = gas_ppm.get('acetylene_C2H2', 0) / (gas_ppm.get('ethylene_C2H4', 1) + 1e-9)
fault_type = 'normal'
if gas_ppm.get('acetylene_C2H2', 0) > 5:
fault_type = 'arc_discharge'
elif c2h4_c2h6 > 1.0 and ch4_h2 > 0.1:
fault_type = 'thermal_fault_high'
elif ch4_h2 > 0.1 and c2h4_c2h6 < 1.0:
fault_type = 'thermal_fault_medium'
elif gas_ppm.get('hydrogen_H2', 0) > 200 and c2h4_c2h6 < 0.1:
fault_type = 'partial_discharge'
urgency = {
'arc_discharge': 'immediate_shutdown',
'thermal_fault_high': 'urgent_inspection',
'thermal_fault_medium': 'schedule_maintenance',
'partial_discharge': 'enhanced_monitoring',
'normal': 'routine'
}
return {
'fault_type': fault_type,
'urgency': urgency[fault_type],
'alarm_gases': alarm_gases,
'rogers_ratios': {'CH4/H2': round(ch4_h2, 3), 'C2H4/C2H6': round(c2h4_c2h6, 3), 'C2H2/C2H4': round(c2h2_c2h4, 3)}
}
Gas trends predict degradation. Linear regression on log concentration detects defect acceleration:
from sklearn.linear_model import LinearRegression
import pandas as pd
def forecast_gas_trend(dga_history: pd.DataFrame, gas: str, forecast_days: int = 30) -> dict:
data = dga_history[['days_ago', gas]].dropna()
data = data[data[gas] > 0]
if len(data) < 3:
return {'status': 'insufficient_data'}
X = data['days_ago'].values.reshape(-1, 1)
y = np.log(data[gas].values)
model = LinearRegression()
model.fit(X, y)
future_x = np.array([[-forecast_days]])
predicted_log = model.predict(future_x)[0]
predicted_concentration = np.exp(predicted_log)
doubling_time = np.log(2) / abs(model.coef_[0]) if model.coef_[0] > 0 else None
return {
'current': data[gas].iloc[-1],
f'forecast_{forecast_days}d': round(predicted_concentration, 1),
'growth_rate_per_day': model.coef_[0],
'doubling_time_days': round(doubling_time, 0) if doubling_time else None,
'threshold_breach_days': estimate_days_to_threshold(data[gas].iloc[-1], predicted_concentration, dga_thresholds.get(gas, {}).get('alarm', float('inf')), forecast_days)
}
Why Predictive Maintenance Reduces Costs by 30%
Compare: planned maintenance replaces oil every 12 months regardless of condition — that's an extra 40% cost. Our AI system analyzes the gas trend and schedules replacement only when thresholds are exceeded. Similarly with cables — partial discharge monitoring replaces annual high-voltage testing.
| Parameter | Planned Maintenance | Predictive AI | Savings |
|---|---|---|---|
| Oil replacement | Every year | Based on condition | -40% |
| Cable replacement | Every 10 years | When PD > 300 pC | -25% |
| Overhead line repair | By schedule | When risk of contact | -35% |
Predictive maintenance reduces maintenance costs by 1.5 times compared to planned maintenance. For cable lines, the benefit is 1.3 times.
Monitoring Cable Lines
Partial discharges in cables are an early indicator of insulation defects. The system analyzes peak discharge magnitude (pC) and repetition rate (PDIV):
def analyze_partial_discharge(pd_measurements: dict) -> dict:
max_pd_pc = pd_measurements.get('max_pd_magnitude_pc', 0)
pd_rate_per_minute = pd_measurements.get('pd_pulse_rate', 0)
pd_location_m = pd_measurements.get('pd_location_tdr_m', None)
if max_pd_pc > 1000:
severity = 'critical'
action = 'immediate_cable_replacement'
elif max_pd_pc > 300:
severity = 'major'
action = 'schedule_replacement_3months'
elif max_pd_pc > 100:
severity = 'minor'
action = 'enhanced_monitoring'
else:
severity = 'normal'
action = 'routine_monitoring'
return {'max_pd_pc': max_pd_pc, 'pd_rate': pd_rate_per_minute, 'pd_location_m': pd_location_m, 'severity': severity, 'action': action}
On one project, we prevented a cascading failure of 8 110 kV cables 3 months before expected damage.
Predicting Conductor Sag
Conductor heating from current and sun leads to sagging. The thermal model (IEEE 738) calculates conductor temperature and actual sag:
def calculate_sag_risk(weather_data: dict, line_parameters: dict) -> dict:
I_amps = line_parameters['current_a']
R_ohm_per_km = line_parameters['resistance_ohm_per_km']
length_km = line_parameters['length_km']
ambient_temp = weather_data['temperature_c']
wind_speed = weather_data['wind_speed_ms']
solar_radiation = weather_data.get('solar_irradiance_wm2', 0)
joule_heating = I_amps**2 * R_ohm_per_km / 1000
convective_cooling = (0.7 + 0.5 * wind_speed) * (80 - ambient_temp)
solar_heating = solar_radiation * 0.015
conductor_temp = ambient_temp + (joule_heating + solar_heating) / (convective_cooling + 1)
base_sag_m = line_parameters.get('design_sag_m', 5.0)
thermal_expansion = 0.023e-3 * (conductor_temp - 20) * length_km * 1000
actual_sag_m = base_sag_m + thermal_expansion * 0.5
clearance_violation = actual_sag_m > line_parameters.get('max_sag_m', 7.0)
return {'conductor_temp_c': round(conductor_temp, 1), 'actual_sag_m': round(actual_sag_m, 2), 'clearance_violation': clearance_violation, 'thermal_limit_pct': min(100, conductor_temp / 90 * 100)}
| Defect Type | DGA Indicators | Risk | Action |
|---|---|---|---|
| Arc flash | C2H2 > 5 ppm | Critical | Immediate shutdown |
| High-temperature overheating | C2H4/C2H6 > 1, CH4/H2 > 0.1 | High | Urgent inspection |
| Partial discharges | H2 > 200 ppm, C2H4/C2H6 < 0.1 | Medium | Enhanced monitoring |
| Normal condition | All gases below thresholds | Low | Planned maintenance |
How We Integrate AI with SAP PM
Risk data is transferred to SAP PM via REST API. The system automatically creates work orders when thresholds are exceeded. For report generation, we use a RAG module based on LlamaIndex with an LLM that extracts relevant fragments from corporate documentation. The RAG module accelerates report generation by 3 times. For adapting the language model to the enterprise specifics, we apply LoRA fine-tuning — this yields accurate responses without retraining the full model. LoRA fine-tuning is 5 times faster than full retraining.
What's Included in the Scope
- Equipment fleet diagnostics (1-2 days) — data collection, current state analysis, identification of critical nodes.
- Development of ML models for DGA, partial discharges, thermal calculations (4-5 weeks).
- Dashboard and alert setup (2 weeks) — Grafana, Telegram/Slack notifications.
- Integration with SAP PM / Maximo (3-4 months) — automatic work order creation by triggers.
- Pilot and staff training (1 month) — threshold adjustment, documentation handover.
- Technical support during operation.
How We Plan Risk-Based Maintenance
Risk matrix: failure probability × consequences (MWh undelivered × fines). Assets are ranked by expected losses. An ML algorithm optimizes the repair schedule, reducing downtime.
Order a pilot project for one transformer and see the effectiveness. Get a consultation on implementing predictive maintenance on your site — our engineers will assess your current fleet and propose an optimal solution within one day.







