Notebook Test Example of Features#
Test calculation of features implemented in versio 0.4
[2]:
import pandas as pd
import numpy as np
[3]:
import sys
sys.path.append(r'D:\pbl\InterpreTS')
[11]:
from interpreTS.core.features.feature_crossing_points import calculate_crossing_points
[14]:
data = pd.Series([1, 3, 2, 4, 1, 5, 2, 6])
result = calculate_crossing_points(data)
print(result)
data = pd.Series([2, 2, 2, 2])
res2 = calculate_crossing_points(data)
print(res2)
{'crossing_count': 7, 'crossing_points': [0, 1, 2, 3, 4, 5, 6]}
{'crossing_count': 0, 'crossing_points': []}
[10]:
from interpreTS.core.features.feature_amplitude_change_rate import calculate_amplitude_change_rate
[13]:
data = pd.Series([1, 3, 2, 4, 1, 5, 2, 6, 3])
res = calculate_amplitude_change_rate(data)
print(res)
data = pd.Series([1, 1, 1, 1])
res2 =calculate_amplitude_change_rate(data)
print(res2)
2.8333333333333335
nan
[15]:
from interpreTS.core.features.feature_linearity import calculate_linearity
[17]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_linearity(data)
print(res)
data = pd.Series([1, 2, 1, 2, 1, 2, 1, 2, 1, 2])
res2 = calculate_linearity(data)
print(res2)
1.0
0.0
[18]:
from interpreTS.core.features.seasonality_strength import calculate_seasonality_strength
[23]:
data = pd.Series([1, 2, 3, 2, 1, 2, 3, 2, 1, 2, 3, 2], index=pd.date_range("2023-01-01", periods=12, freq="M"))
res1 = calculate_seasonality_strength(data, period=3)
print(res)
data = pd.Series([1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2])
res2 = calculate_seasonality_strength(data, period=2)
print(res2)
1.0
0.8333333333333333
[24]:
from interpreTS.core.features.distance_to_the_last_change_point import calculate_distance_to_last_trend_change
[25]:
data = pd.Series([1, 2, 3, 2, 1, 2, 3, 2, 1])
res = calculate_distance_to_last_trend_change(data, window_size=2)
print(res)
1
[26]:
from interpreTS.core.features.feature_above_9th_decile import calculate_above_9th_decile
[27]:
data = pd.Series([8, 9, 10, 11, 12])
training_data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
calculate_above_9th_decile(data, training_data)
[27]:
0.6
[28]:
from interpreTS.core.features.feature_absolute_energy import calculate_absolute_energy
[29]:
data = pd.Series([1, 2, 3, 4])
res1 = calculate_absolute_energy(data)
print(res1)
res2 = calculate_absolute_energy(data, start=1, end=3)
print(res2)
30
13
[30]:
from interpreTS.core.features.feature_below_1st_decile import calculate_below_1st_decile
[31]:
data = pd.Series([1, 2, 3, 4, 5])
training_data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
res1 = calculate_below_1st_decile(data, training_data)
print(res1)
0.2
[32]:
from interpreTS.core.features.feature_binarize_mean import calculate_binarize_mean
[35]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_binarize_mean(data)
print(res)
0.6
[36]:
from interpreTS.core.features.feature_entropy import calculate_entropy
[37]:
data = pd.Series([1, 2, 3, 1, 2, 3, 1, 2, 3])
res1 = calculate_entropy(data, bins=3)
print(res1)
data = pd.Series([1, 1, 1, 1])
res2 = calculate_entropy(data, bins=2)
print(res2)
1.0
0.0
[38]:
from interpreTS.core.features.feature_flat_spots import calculate_flat_spots
[39]:
data = pd.Series([1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 5, 1, 1])
res = calculate_flat_spots(data)
print(res)
4
[4]:
from interpreTS.core.features.feature_heterogeneity import calculate_heterogeneity
[5]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_heterogeneity(data)
print(res)
0.5270462766947299
[6]:
from interpreTS.core.features.feature_length import calculate_length
[7]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_length(data)
print(res)
5
[8]:
from interpreTS.core.features.feature_mean import calculate_mean
[9]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_mean(data)
print(res)
3.0
[10]:
from interpreTS.core.features.feature_missing_points import calculate_missing_points
[11]:
data = pd.Series([1, 2, np.nan, 4, None])
res1 = calculate_missing_points(data)
print(res1)
res2 = calculate_missing_points(data, percentage=False)
print(res)
0.4
3.0
[12]:
from interpreTS.core.features.feature_outliers_iqr import calculate_outliers_iqr
[13]:
training_data = np.array([10, 12, 14, 15, 16, 18, 19])
data = np.array([9, 15, 20, 25])
res1 = calculate_outliers_iqr(data, training_data)
print(res1)
training_data = np.array([10, 10, 10, 10, 10])
data = np.array([10, 11, 12, 9])
res2 = calculate_outliers_iqr(data, training_data)
print(res2)
0.25
0.25
[14]:
from interpreTS.core.features.feature_outliers_std import calculate_outliers_std
[15]:
training_data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
data = pd.Series([0, 10, 2, 3, 15])
res = calculate_outliers_std(data, training_data)
print(res)
0.2
[16]:
from interpreTS.core.features.feature_peak import calculate_peak
[17]:
data = pd.Series([1, 2, 5, 4, 7])
res1 = calculate_peak(data)
print(res1)
res2 =calculate_peak(data, start=1, end=3)
print(res2)
7
5
[18]:
from interpreTS.core.features.feature_significant_changes import calculate_significant_changes
[22]:
data = np.array([1, 100, 1, 200, 50, 3, 1])
res1 = calculate_significant_changes(data)
print(res1) #isn't correct, all examples was 0.0
0.0
[23]:
from interpreTS.core.features.feature_spikeness import calculate_spikeness
[24]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_spikeness(data)
print(res)
0.0
[25]:
from interpreTS.core.features.feature_stability import calculate_stability
[26]:
data = pd.Series([10, 12, 11, 13, 12, 14, 11, 13, 12, 14, 13])
res1 = calculate_stability(data)
print(res1)
data = pd.Series([5, 20, 3, 18, 1, 25, 2, 22, 0, 19])
res2 = calculate_stability(data)
print(res2)
0.8410385081084804
0.6144144729613819
[27]:
from interpreTS.core.features.feature_std_1st_der import calculate_std_1st_der
[28]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_std_1st_der(data)
print(res)
0.0
[29]:
from interpreTS.core.features.feature_trough import calculate_trough
[30]:
data = pd.Series([1, 2, 5, 4, 3])
res1 = calculate_trough(data)
print(res1)
res2 = calculate_trough(data, start=1, end=3)
print(res2)
1
2
[31]:
from interpreTS.core.features.feature_variance import calculate_variance
[32]:
data = pd.Series([10, 12, 14, 16, 18])
res1 = calculate_variance(data)
print(res1)
data = np.array([2, 4, 6, 8, 10])
res2 = calculate_variance(data, ddof=0)
print(res2)
data = pd.Series([5])
res3 = calculate_variance(data)
print(res3)
10.0
8.0
0.0
[33]:
from interpreTS.core.features.histogram_dominant import calculate_dominant
[34]:
data = np.array([1, 2, 2, 3, 3, 3, 4, 4, 5])
res1 = calculate_dominant(data, bins=5)
print(res1)
data = np.array([10, 20, 20, 30, 30, 30, 40, 40, 50])
res2 = calculate_dominant(data, bins=5, return_bin_center=True)
print(res2)
data = np.array([1, 1, 1, 1, 1])
res3 = calculate_dominant(data, bins=3)
print(res3)
2.6
30.0
0.8333333333333333
[35]:
from interpreTS.core.features.mean_change import calculate_mean_change
[36]:
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
res = calculate_mean_change(data, window_size=3)
print(res)
0 NaN
1 NaN
2 NaN
3 1.0
4 1.0
5 1.0
6 1.0
7 1.0
8 1.0
9 1.0
dtype: float64
[37]:
from interpreTS.core.features.trend_strength import calculate_trend_strength
[38]:
data = pd.Series([1, 2, 3, 4, 5])
res = calculate_trend_strength(data)
print(res)
1.0
[39]:
from interpreTS.core.features.variability_in_sub_periods import calculate_variability_in_sub_periods
[40]:
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
res = calculate_variability_in_sub_periods(data, window_size=5)
print(res)
0 2.0
1 2.0
dtype: float64
[41]:
from interpreTS.core.features.variance_change import calculate_change_in_variance
[43]:
data = pd.Series([1, 2, 7, 4, 5, 9, 12, 8, 1, 10])
res = calculate_change_in_variance(data, window_size=3)
print(res)
0 NaN
1 NaN
2 NaN
3 -4.000000
4 -4.000000
5 4.666667
6 5.333333
7 -8.000000
8 26.666667
9 -8.666667
dtype: float64