Skip to content

Commit c933568

Browse files
author
Jaime Céspedes Sisniega
authored
Merge pull request #184 from IFCA/fix-reorganize-concept-drift-methods
Reorganize concept drift methods
2 parents 69baae9 + 35fde0a commit c933568

File tree

13 files changed

+74
-53
lines changed

13 files changed

+74
-53
lines changed

docs/source/images/detectors.png

-112 Bytes
Loading

frouros/detectors/concept_drift/streaming/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
PageHinkley,
1010
PageHinkleyConfig,
1111
)
12-
from .ddm_based import (
12+
from .statistical_process_control import (
1313
DDM,
1414
DDMConfig,
1515
ECDDWT,
@@ -22,14 +22,14 @@
2222
HDDMWConfig,
2323
RDDM,
2424
RDDMConfig,
25-
STEPD,
26-
STEPDConfig,
2725
)
2826
from .window_based import (
2927
ADWIN,
3028
ADWINConfig,
3129
KSWIN,
3230
KSWINConfig,
31+
STEPD,
32+
STEPDConfig,
3333
)
3434

3535
__all__ = [

frouros/detectors/concept_drift/streaming/ddm_based/__init__.py renamed to frouros/detectors/concept_drift/streaming/statistical_process_control/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
"""Concept drift DDM based detection methods' init."""
1+
"""Concept drift SPC (statistical process control) detection methods' init."""
22

33
from .ddm import DDM, DDMConfig
44
from .ecdd import ECDDWT, ECDDWTConfig
55
from .eddm import EDDM, EDDMConfig
66
from .hddm import HDDMA, HDDMAConfig, HDDMW, HDDMWConfig
77
from .rddm import RDDM, RDDMConfig
8-
from .stepd import STEPD, STEPDConfig
98

109
__all__ = [
1110
"DDM",
@@ -18,8 +17,6 @@
1817
"HDDMAConfig",
1918
"HDDMW",
2019
"HDDMWConfig",
21-
"STEPD",
22-
"STEPDConfig",
2320
"RDDM",
2421
"RDDMConfig",
2522
]

frouros/detectors/concept_drift/streaming/ddm_based/base.py renamed to frouros/detectors/concept_drift/streaming/statistical_process_control/base.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Supervised DDM based base module."""
1+
"""Concept drift SPC (statistical process control) base module."""
22

33
import abc
44
from typing import Dict, List, Optional, Tuple, Union
@@ -14,8 +14,8 @@
1414
from frouros.utils.stats import Mean
1515

1616

17-
class DDMBaseConfig(ConceptDriftStreamingBaseConfig):
18-
"""Class representing a DDM based configuration class."""
17+
class SPCBaseConfig(ConceptDriftStreamingBaseConfig):
18+
"""Class representing a SPC configuration class."""
1919

2020
def __init__(
2121
self,
@@ -82,20 +82,20 @@ def warning_level(self, value: float) -> None:
8282
self._warning_level = value
8383

8484

85-
class DDMBased(ConceptDriftStreamingBase):
86-
"""Abstract class representing a DDM based estimator."""
85+
class SPCBase(ConceptDriftStreamingBase):
86+
"""Abstract class representing an SPC estimator."""
8787

88-
config_type = DDMBaseConfig
88+
config_type = SPCBaseConfig
8989

9090
def __init__(
9191
self,
92-
config: Optional[DDMBaseConfig] = None,
92+
config: Optional[SPCBaseConfig] = None,
9393
callbacks: Optional[Union[Callback, List[Callback]]] = None,
9494
) -> None:
9595
"""Init method.
9696
9797
:param config: configuration parameters
98-
:type config: Optional[DDMBaseConfig]
98+
:type config: Optional[SPCBaseConfig]
9999
:param callbacks: callbacks
100100
:type callbacks: Optional[Union[Callback, List[Callback]]]
101101
"""
@@ -145,20 +145,20 @@ def _update(self, value: Union[int, float], **kwargs) -> None:
145145
pass
146146

147147

148-
class DDMErrorBased(DDMBased):
149-
"""Abstract class representing a DDM error based estimator."""
148+
class SPCErrorBase(SPCBase):
149+
"""Abstract class representing a SPC error estimator."""
150150

151-
config_type = DDMBaseConfig
151+
config_type = SPCBaseConfig
152152

153153
def __init__(
154154
self,
155-
config: Optional[DDMBaseConfig] = None,
155+
config: Optional[SPCBaseConfig] = None,
156156
callbacks: Optional[Union[Callback, List[Callback]]] = None,
157157
) -> None:
158158
"""Init method.
159159
160160
:param config: configuration parameters
161-
:type config: Optional[DDMBaseConfig]
161+
:type config: Optional[SPCBaseConfig]
162162
:param callbacks: callbacks
163163
:type callbacks: Optional[Union[Callback, List[Callback]]]
164164
"""

frouros/detectors/concept_drift/streaming/ddm_based/ddm.py renamed to frouros/detectors/concept_drift/streaming/statistical_process_control/ddm.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
from contextlib import suppress
44
from typing import Union
55

6-
from frouros.detectors.concept_drift.streaming.ddm_based.base import (
7-
DDMBaseConfig,
8-
DDMErrorBased,
6+
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
7+
SPCBaseConfig,
8+
SPCErrorBase,
99
)
1010

1111

12-
class DDMConfig(DDMBaseConfig):
12+
class DDMConfig(SPCBaseConfig):
1313
"""DDM (Drift detection method) [gama2004learning]_ configuration.
1414
1515
:References:
@@ -22,7 +22,7 @@ class DDMConfig(DDMBaseConfig):
2222
"""
2323

2424

25-
class DDM(DDMErrorBased):
25+
class DDM(SPCErrorBase):
2626
"""DDM (Drift detection method) [gama2004learning]_ detector.
2727
2828
:References:

frouros/detectors/concept_drift/streaming/ddm_based/ecdd.py renamed to frouros/detectors/concept_drift/streaming/statistical_process_control/ecdd.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import numpy as np # type: ignore
66

77
from frouros.callbacks import Callback
8-
from frouros.detectors.concept_drift.streaming.ddm_based.base import (
9-
DDMBased,
8+
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
9+
SPCBase,
1010
ECDDBaseConfig,
1111
)
1212
from frouros.utils.stats import EWMA, Mean
@@ -23,7 +23,7 @@ class ECDDWTConfig(ECDDBaseConfig):
2323
"""
2424

2525

26-
class ECDDWT(DDMBased):
26+
class ECDDWT(SPCBase):
2727
"""ECDDWT (EWMA Concept Drift Detection Warning) [ross2012exponentially]_ detector.
2828
2929
:References:

frouros/detectors/concept_drift/streaming/ddm_based/eddm.py renamed to frouros/detectors/concept_drift/streaming/statistical_process_control/eddm.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
import numpy as np # type: ignore
77

88
from frouros.callbacks import Callback
9-
from frouros.detectors.concept_drift.streaming.ddm_based.base import (
10-
DDMBaseConfig,
11-
DDMBased,
9+
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
10+
SPCBaseConfig,
11+
SPCBase,
1212
)
1313

1414

15-
class EDDMConfig(DDMBaseConfig):
15+
class EDDMConfig(SPCBaseConfig):
1616
"""EDDM (Early drift detection method) [baena2006early]_ configuration.
1717
1818
:References:
@@ -133,7 +133,7 @@ def min_num_misclassified_instances(self, value: int) -> None:
133133
self._min_num_misclassified_instances = value
134134

135135

136-
class EDDM(DDMBased):
136+
class EDDM(SPCBase):
137137
"""EDDM (Early drift detection method) [baena2006early]_ detector.
138138
139139
:References:

frouros/detectors/concept_drift/streaming/ddm_based/hddm.py renamed to frouros/detectors/concept_drift/streaming/statistical_process_control/hddm.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
import numpy as np # type: ignore
77

88
from frouros.callbacks import Callback
9-
from frouros.detectors.concept_drift.streaming.ddm_based.base import (
10-
DDMBaseConfig,
11-
DDMBased,
9+
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
10+
SPCBaseConfig,
11+
SPCBase,
1212
)
1313
from frouros.utils.stats import EWMA, Mean
1414

1515

16-
class HDDMBaseConfig(DDMBaseConfig):
16+
class HDDMBaseConfig(SPCBaseConfig):
1717
"""HDDM (Hoeffding's drift detection method) [frias2014online]_ configuration.
1818
1919
:References:
@@ -318,7 +318,7 @@ def update_cut_point(self, epsilon_z: float) -> None:
318318
self.y = copy.deepcopy(self.z)
319319

320320

321-
class HDDMA(DDMBased):
321+
class HDDMA(SPCBase):
322322
"""HDDM-A (Hoeffding's drift detection method with A-Test) [frias2014online]_ detector.
323323
324324
:References:
@@ -614,7 +614,7 @@ def update_stats(self, value: float, alpha: float) -> None:
614614
self.sample_decrease_2.update(value=value)
615615

616616

617-
class HDDMW(DDMBased):
617+
class HDDMW(SPCBase):
618618
"""HDDM-W (Hoeffding's drift detection method with W-Test) [frias2014online]_ detector.
619619
620620
:References:

frouros/detectors/concept_drift/streaming/ddm_based/rddm.py renamed to frouros/detectors/concept_drift/streaming/statistical_process_control/rddm.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
from typing import List, Optional, Union
44

55
from frouros.callbacks import Callback
6-
from frouros.detectors.concept_drift.streaming.ddm_based.base import (
7-
DDMBaseConfig,
8-
DDMErrorBased,
6+
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
7+
SPCBaseConfig,
8+
SPCErrorBase,
99
)
1010
from frouros.utils.data_structures import CircularQueue
1111
from frouros.utils.stats import Mean
1212

1313

14-
class RDDMConfig(DDMBaseConfig):
14+
class RDDMConfig(SPCBaseConfig):
1515
"""RDDM (Reactive Drift detection method) [barros2017rddm]_ configuration.
1616
1717
:References:
@@ -110,7 +110,7 @@ def max_num_instances_warning(self, value: int) -> None:
110110
self._max_num_instances_warning = value
111111

112112

113-
class RDDM(DDMErrorBased):
113+
class RDDM(SPCErrorBase):
114114
"""RDDM (Reactive Drift detection method) [barros2017rddm]_ detector.
115115
116116
:References:

frouros/detectors/concept_drift/streaming/window_based/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22

33
from .adwin import ADWIN, ADWINConfig
44
from .kswin import KSWIN, KSWINConfig
5+
from .stepd import STEPD, STEPDConfig
6+
57

68
__all__ = [
79
"ADWIN",
810
"ADWINConfig",
911
"KSWIN",
1012
"KSWINConfig",
13+
"STEPD",
14+
"STEPDConfig",
1115
]

0 commit comments

Comments
 (0)