Draft: WIP: flagging plateaus
Adding wavelet-based flagging of outlierish plateaus.
Based on the idea of searching for ricker-wavelet patterns, at decompositionscales generated by themselfs, a quite powerful, parameter minimal algorithm/workflow was sketched out and implemented.
Based only on the minimal and maximal length of plateus to be detected, the algorithm seems to perform well on highly volatile and noisy test data.
Example
Example data set was generated by
- generating noisy baseline, adding offsets and outliers (
base1
) - adding some cosine variance to the data (
base2
) - adding highly volatile, real world turbidity meassurements to the data (
base3
)
Flagging result for the call:
qc = qc.flagPlateau('base3', min_length='100min', max_length='7d')
Looks as follows (overview):
Zoomed in on the flagged chunks:
Evaluation
This good results, with:
- parameter minimal application
- no overflagging
- quite precise flagging of targeted anomalies
comes at some hefty numerical costs, due to the auto search at the different wavelet scales. Result for the example data needed ~2 minutes of calculation (25000 periods).
To Do
To speed that up, the function scaleScoring
needs some cython or numba boosted modification.
Also the code needs cleanup and refactoring.