Skip to content

Commit a0871b7

Browse files
committed
wip: Original edivisive feature flag
Untested
1 parent 1e8e6f6 commit a0871b7

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

hunter/analysis.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
from signal_processing_algorithms.e_divisive.base import SignificanceTester
99
from signal_processing_algorithms.e_divisive.calculators import cext_calculator
1010
from signal_processing_algorithms.e_divisive.change_points import EDivisiveChangePoint
11-
11+
from signal_processing_algorithms.e_divisive.significance_test import \
12+
QHatPermutationsSignificanceTester
1213

1314
@dataclass
1415
class ComparativeStats:
@@ -222,6 +223,16 @@ def split(series: np.array, window_len: int = 30, max_pvalue: float = 0.001) ->
222223
return [tester.change_point(i, series, window_endpoints) for i in indexes]
223224

224225

226+
def compute_change_points_orig(series: np.array, max_pvalue: float = 0.001) -> List[ChangePoint]:
227+
calculator = cext_calculator
228+
tester = QHatPermutationsSignificanceTester(calculator, pvalue=max_pvalue, permutations=100)
229+
algo = EDivisive(seed=None, calculator=calculator, significance_tester=tester)
230+
pts = algo.get_change_points(series)
231+
indexes = [p.index for p in pts]
232+
window_endpoints = [0] + indexes + [len(series)]
233+
return [tester.change_point(i, series, window_endpoints) for i in indexes]
234+
235+
225236
def compute_change_points(
226237
series: np.array, window_len: int = 50, max_pvalue: float = 0.001, min_magnitude: float = 0.05
227238
) -> List[ChangePoint]:

hunter/main.py

+10
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,14 @@ def setup_analysis_options_parser(parser: argparse.ArgumentParser):
441441
"as noise so it is best to keep it short enough to include not more "
442442
"than a few change points (optimally at most 1)",
443443
)
444+
parser.add_argument(
445+
"--orig-edivisive",
446+
type=bool,
447+
default=False,
448+
dest="orig_edivisive",
449+
help="use the original edivisive algorithm with no windowing "
450+
"and weak change points analysis improvements",
451+
)
444452

445453

446454
def analysis_options_from_args(args: argparse.Namespace) -> AnalysisOptions:
@@ -451,6 +459,8 @@ def analysis_options_from_args(args: argparse.Namespace) -> AnalysisOptions:
451459
conf.min_magnitude = args.magnitude
452460
if args.window is not None:
453461
conf.window_len = args.window
462+
if args.orig_edivisive is not None:
463+
conf.orig_edivisive = args.orig_edivisive
454464
return conf
455465

456466

hunter/series.py

+15-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
fill_missing,
99
compute_change_points,
1010
ComparativeStats,
11-
TTestSignificanceTester,
11+
TTestSignificanceTester, compute_change_points_orig,
1212
)
1313

1414
import numpy as np
@@ -19,11 +19,13 @@ class AnalysisOptions:
1919
window_len: int
2020
max_pvalue: float
2121
min_magnitude: float
22+
orig_edivisive: bool
2223

2324
def __init__(self):
2425
self.window_len = 50
2526
self.max_pvalue = 0.001
2627
self.min_magnitude = 0.0
28+
self.orig_edivisive = False
2729

2830

2931
@dataclass
@@ -151,12 +153,18 @@ def __compute_change_points(
151153
for metric in series.data.keys():
152154
values = series.data[metric].copy()
153155
fill_missing(values)
154-
change_points = compute_change_points(
155-
values,
156-
window_len=options.window_len,
157-
max_pvalue=options.max_pvalue,
158-
min_magnitude=options.min_magnitude,
159-
)
156+
if options.orig_edivisive:
157+
change_points = compute_change_points_orig(
158+
values,
159+
max_pvalue=options.max_pvalue,
160+
)
161+
else:
162+
change_points = compute_change_points(
163+
values,
164+
window_len=options.window_len,
165+
max_pvalue=options.max_pvalue,
166+
min_magnitude=options.min_magnitude,
167+
)
160168
result[metric] = []
161169
for c in change_points:
162170
result[metric].append(

0 commit comments

Comments
 (0)