summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2012-05-10 12:28:08 +0200
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2012-05-10 12:28:08 +0200
commitd0b29ac2f35923e05deda5dbe1856f04911c55bf (patch)
treec4c29e9b9ac725c9fd4de4861c056ecc99644774
parent031f9ecc989d177215bc85e1827cf1d72db07643 (diff)
downloaddmc-d0b29ac2f35923e05deda5dbe1856f04911c55bf.tar.gz
dmc-d0b29ac2f35923e05deda5dbe1856f04911c55bf.tar.bz2
dmc-d0b29ac2f35923e05deda5dbe1856f04911c55bf.zip
Add logarithmic interpolation predection
Slightly better than linear regression.
-rw-r--r--log_regress_pred.m22
-rw-r--r--run_tests.m1
2 files changed, 23 insertions, 0 deletions
diff --git a/log_regress_pred.m b/log_regress_pred.m
new file mode 100644
index 0000000..3c90441
--- /dev/null
+++ b/log_regress_pred.m
@@ -0,0 +1,22 @@
+function pred = log_regress_pred(price, quantity)
+
+ days = size(price, 1) - size(quantity, 1);
+ product_count = size(price, 2);
+ test_count = size(quantity, 1);
+ test_set = 1:test_count;
+ pred_set = test_count+1:size(price, 1);
+
+ pred = zeros(days, product_count);
+ for i = 1:product_count
+ [a,b] = regress_log(price(test_set, i), quantity(test_set, i));
+ pred(:, i) = a * log(price(pred_set, i)) + b;
+ end
+
+endfunction
+
+
+function [a,b] = regress_log(x, y)
+ ab = [ log(x) ones(length(x), 1) ] \ y;
+ a = ab(1);
+ b = ab(2);;
+endfunction
diff --git a/run_tests.m b/run_tests.m
index 6ad92ce..b7b1a83 100644
--- a/run_tests.m
+++ b/run_tests.m
@@ -6,6 +6,7 @@
% plot prediction quallity
calc_error('mean', q(29:42, :), mean_pred(q(1:28, :), 14));
calc_error('regress', q(29:42, :), regress_pred(p, q(1:28, :)));
+calc_error('log regress', q(29:42, :), log_regress_pred(p, q(1:28, :)));
calc_error('sevenday', q(29:42, :), repmat(sevenday_pred(q(1:28, :), 4), 2, 1));
calc_error('random', q(29:42, :), rand_pred(q(1:28, :), 14));