diff --git a/src/metabase/sync/analyze/fingerprint/insights.clj b/src/metabase/sync/analyze/fingerprint/insights.clj
index 0ce11aebf10279ce5b7ce88d42ca9f5d91d5a716..8d8ac5da5aed52040adbe2817a40f746b1f01b35 100644
--- a/src/metabase/sync/analyze/fingerprint/insights.clj
+++ b/src/metabase/sync/analyze/fingerprint/insights.clj
@@ -32,7 +32,7 @@
       (cond
         (every? neg? [x1 x2])     (change (- x1) (- x2))
         (and (neg? x1) (pos? x2)) (- (change x1 x2))
-        (neg? x1)                 (- (change x2 x1))
+        (neg? x1)                 (- (change x2 (- x1)))
         :else                     (/ (- x2 x1) x1)))))
 
 (defn reservoir-sample
diff --git a/test/metabase/sync/analyze/fingerprint/insights_test.clj b/test/metabase/sync/analyze/fingerprint/insights_test.clj
index 2c4e4c8e162431b1de38306436d6c8d8a7a1cdb0..79f1cbbc34a31b517b00712255f29dbffd2701c8 100644
--- a/test/metabase/sync/analyze/fingerprint/insights_test.clj
+++ b/test/metabase/sync/analyze/fingerprint/insights_test.clj
@@ -117,3 +117,15 @@
   (transduce identity
              (insights [{:base_type :type/DateTime} {:base_type :type/Number} {:base_type :type/Number}])
              ts))
+
+(deftest change-test
+  (is (= 0.0 (change 1 1)))
+  (is (= -0.5 (change 1 2)))
+  (is (= 1.0 (change 2 1)))
+  (is (= nil (change 1 0)))
+  (is (= -1.0 (change 0 1)))
+  (is (= 2.0 (change 1 -1)))
+  (is (= -2.0 (change -1 1)))
+  (is (= 1.0 (change -1 -2)))
+  (is (= nil (change -1 0)))
+  (is (= 1.0 (change 0 -1))))