From bbd308cf0dc2d36e8f4c84a940bf556b954ca339 Mon Sep 17 00:00:00 2001 From: Tom Veasey Date: Fri, 17 Jul 2020 08:47:42 +0100 Subject: [PATCH 1/2] [ML] Testing for no change should not use the change trend model Change #1391 introduced a subtle error: when computing the likelihood of no change we should use a reference to the current time series trend model, not the copy of the model which assumes a change is occurring. --- lib/maths/CTimeSeriesChangeDetector.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/maths/CTimeSeriesChangeDetector.cc b/lib/maths/CTimeSeriesChangeDetector.cc index cf0fdec4b2..f50325d566 100644 --- a/lib/maths/CTimeSeriesChangeDetector.cc +++ b/lib/maths/CTimeSeriesChangeDetector.cc @@ -102,13 +102,13 @@ CUnivariateTimeSeriesChangeDetector::CUnivariateTimeSeriesChangeDetector( : m_MinimumTimeToDetect{minimumTimeToDetect}, m_MaximumTimeToDetect{maximumTimeToDetect}, m_MinimumDeltaBicToDetect{minimumDeltaBicToDetect}, m_SampleCount{0}, m_DecisionFunction{0.0}, m_TrendModel{trendModel->clone()} { + m_ChangeModels.push_back( + std::make_unique(trendModel, residualModel)); this->initChangeModels(residualModel); } void CUnivariateTimeSeriesChangeDetector::initChangeModels(TPriorPtr residualModel) { - m_ChangeModels.clear(); - m_ChangeModels.push_back( - boost::make_unique(m_TrendModel, residualModel)); + m_ChangeModels.resize(1); m_ChangeModels.push_back( boost::make_unique(m_TrendModel, residualModel)); if (m_TrendModel->seasonalComponents().size() > 0) { From bdbb8931bbac42a31e7fcf5738934c1c5c03f5bc Mon Sep 17 00:00:00 2001 From: Tom Veasey Date: Fri, 17 Jul 2020 10:21:02 +0100 Subject: [PATCH 2/2] Fix merge --- lib/maths/CTimeSeriesChangeDetector.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/maths/CTimeSeriesChangeDetector.cc b/lib/maths/CTimeSeriesChangeDetector.cc index f50325d566..1b7e3aa089 100644 --- a/lib/maths/CTimeSeriesChangeDetector.cc +++ b/lib/maths/CTimeSeriesChangeDetector.cc @@ -103,7 +103,7 @@ CUnivariateTimeSeriesChangeDetector::CUnivariateTimeSeriesChangeDetector( m_MinimumDeltaBicToDetect{minimumDeltaBicToDetect}, m_SampleCount{0}, m_DecisionFunction{0.0}, m_TrendModel{trendModel->clone()} { m_ChangeModels.push_back( - std::make_unique(trendModel, residualModel)); + boost::make_unique(trendModel, residualModel)); this->initChangeModels(residualModel); }