我有 3 个变量;Market_Price、小时、年龄。
使用优化我发现了每个变量和 Market_Price 之间的关系。
数据:
hours = [1000, 10000, 11000, 11000, 15000, 18000, 37000, 24000, 28000, 28000, 42000, 46000, 50000, 34000, 34000, 46000, 50000, 56000, 64000, 64000, 65000, 80000, 81000, 81000, 44000, 49000, 76000, 76000, 89000, 38000, 80000, 69000, 46000, 47000, 57000, 72000, 77000, 68000]
market_Price = [30945, 28974, 27989, 27989, 36008, 24780, 22980, 23997, 25957, 27847, 36000, 25588, 23980, 25990, 25990, 28995, 26770, 26488, 24988, 24988, 17574, 12995, 19788, 20488, 19980, 24978, 16000, 16400, 18988, 19980, 18488, 16988, 15000, 15000, 16998, 17499, 15780, 8400]
age = [2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 8, 8, 8, 8, 8, 13,]
我得出的关系是:
到 market_price 的小时数 = log(h)*h1+h2,
年龄到市场价格 = log(a)*a1+a2
其中 h1、h2、a1、a2 是使用 Scipy 的优化曲线拟合找到的。
现在我想将所有 3 项合并到一个计算中,根据年龄和时间,我可以确定 market_price。
到目前为止,我一直这样做的方法是通过确定哪个组合具有最小的标准偏差来找到两者之间的比率。
std_divs = []
for ratio in ratios:
n = 0
price_difference_final = []
while n < len(prices):
predicted_price = (log(h)*h1+h1)*ratio + (log(a)*a1+a1)*(1-ratio)
price_difference_final.append(prices[n] - predicted_price)
n += 1
data = np.array(price_difference_final)
std_divs.append(np.std(data))
std_div = min(std_divs)
optimum_ratio = ratios[std_divs.index(min(std_divs))]
如您所见,我通过蛮力来完成此操作,这不是一个优雅的解决方案。
此外,现在我发现3之间的关系不能用单一的比率来表示,而是需要滑动比率。随着年份的增加,小时/年龄比率会降低,从而使年龄在市场价格方面的权重越来越大。
不幸的是,我无法使用 Scipy 的曲线拟合来实现这一点,因为它只接受一对数组。
有没有想过如何最好地实现这一目标?