Tutorial on remaining useful lifetime estimation task#

Importing libraries.

from ice.remaining_useful_life_estimation.datasets import RulCmapss
from ice.remaining_useful_life_estimation.models import LSTM

import pandas as pd
import numpy as np
import torch
from tqdm.auto import trange

Initializing model class and train/test data split

dataset_class = RulCmapss()

data, target = dataset_class.df[0], dataset_class.target[0]
test_data, test_target = dataset_class.test[0], dataset_class.test_target[0]  
Downloading C-MAPSS: 100%|██████████| 29.3M/29.3M [00:07<00:00, 4.10MB/s]
Extracting C-MAPSS/fd1_test.csv: 9.77MB [00:00, 10.3GB/s]                   
Extracting C-MAPSS/fd1_train.csv: 9.77MB [00:00, 10.3GB/s]                   
Extracting C-MAPSS/fd2_test.csv: 19.5MB [00:00, 2.28GB/s]                   
Extracting C-MAPSS/fd2_train.csv: 29.3MB [00:00, 1.14GB/s]                   
Extracting C-MAPSS/fd3_test.csv: 9.77MB [00:00, 5.14GB/s]                   
Extracting C-MAPSS/fd3_train.csv: 9.77MB [00:00, 5.14GB/s]                   
Extracting C-MAPSS/fd4_test.csv: 19.5MB [00:00, 1.37GB/s]                   
Extracting C-MAPSS/fd4_train.csv: 29.3MB [00:00, 907MB/s]                    
Reading data/C-MAPSS/fd1_train.csv: 100%|██████████| 20631/20631 [00:00<00:00, 414000.30it/s]
Reading data/C-MAPSS/fd2_train.csv: 100%|██████████| 53759/53759 [00:00<00:00, 531391.39it/s]
Reading data/C-MAPSS/fd3_train.csv: 100%|██████████| 24720/24720 [00:00<00:00, 496056.24it/s]
Reading data/C-MAPSS/fd4_train.csv: 100%|██████████| 61249/61249 [00:00<00:00, 539069.75it/s]
Reading data/C-MAPSS/fd1_train.csv: 100%|██████████| 20631/20631 [00:00<00:00, 449997.33it/s]
Reading data/C-MAPSS/fd2_train.csv: 100%|██████████| 53759/53759 [00:00<00:00, 528800.50it/s]
Reading data/C-MAPSS/fd3_train.csv: 100%|██████████| 24720/24720 [00:00<00:00, 496034.88it/s]
Reading data/C-MAPSS/fd4_train.csv: 100%|██████████| 61249/61249 [00:00<00:00, 532046.23it/s]
Reading data/C-MAPSS/fd1_test.csv: 100%|██████████| 13097/13097 [00:00<00:00, 477747.14it/s]
Reading data/C-MAPSS/fd2_test.csv: 100%|██████████| 33991/33991 [00:00<00:00, 494267.82it/s]
Reading data/C-MAPSS/fd3_test.csv: 100%|██████████| 16598/16598 [00:00<00:00, 520427.44it/s]
Reading data/C-MAPSS/fd4_test.csv: 100%|██████████| 41214/41214 [00:00<00:00, 523441.82it/s]
Reading data/C-MAPSS/fd1_test.csv: 100%|██████████| 13097/13097 [00:00<00:00, 505412.69it/s]
Reading data/C-MAPSS/fd2_test.csv: 100%|██████████| 33991/33991 [00:00<00:00, 509017.18it/s]
Reading data/C-MAPSS/fd3_test.csv: 100%|██████████| 16598/16598 [00:00<00:00, 512334.66it/s]
Reading data/C-MAPSS/fd4_test.csv: 100%|██████████| 41214/41214 [00:00<00:00, 526743.49it/s]

Training

metrics = []
for i in trange(5): # 5
    torch.random.manual_seed(i)
    model_class = LSTM(
        window_size=32,
        batch_size= 64,
        lr=1e-4,
        num_epochs=35,
        verbose=False,
        device='cuda'
    )
    model_class.fit(data, target)
    metrics.append(model_class.evaluate(test_data, test_target))
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33444.73it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33444.73it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33562.49it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33447.40it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33444.73it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33450.07it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33442.07it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 50159.10it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33447.40it/s]
Creating sequence of samples: 100%|██████████| 100/100 [00:00<00:00, 33444.73it/s]
100%|██████████| 5/5 [02:55<00:00, 35.06s/it]

Printing metric

rmse = []
cmapss_score = []
for metrics_i in metrics:
    rmse.append(metrics_i["rmse"])
    cmapss_score.append(metrics_i["cmapss_score"])

print(f'rmse: {np.mean(rmse):.6f} ± {2*np.std(rmse):.6f}')
print(f'cmapss_score: {np.mean(cmapss_score):.6f} ± {2*np.std(cmapss_score):.6f}')
rmse: 14.417728 ± 0.149395
cmapss_score: 38126.871653 ± 4720.122718

Parameter esimation

model_class.model_param_estimation()
(944129, (0.9755877789258957, 0.45680200297600426))