def arima(): """ ARIMA (AutoRegressive Integrated Moving Average) :return: list of prediction """ df = read_as_df("total.csv") train_data, test_data = df[0:int(len(df) * 0.8)], df[int(len(df) * 0.8):] df.head() plot_train_and_test(train_data, test_data, df) train_ar = train_data['price'].values test_ar = test_data['price'].values history = [x for x in train_ar] print(type(history)) predictions = list() for t in range(len(test_ar)): model = ARIMA(history, order=(3, 1, 0)) model_fit = model.fit(disp=0) output = model_fit.forecast() yhat = output[0] predictions.append(yhat) obs = test_ar[t] history.append(obs) plot_prediction(df, test_data, predictions) return predictions
def arima_validation(predictions): df = read_as_df("total.csv") train_data, test_data = df[0:int(len(df) * 0.8)], df[int(len(df) * 0.8):] test_ar = test_data['price'].values #error = mean_squared_error(test_ar, predictions) #print('Testing Mean Squared Error: %.3f' % error) #error2 = smape(test_ar, predictions) #print('Symmetric mean absolute percentage error: %.3f' % error2) plot_validation(df, test_data, predictions) score = score_with_diff(test_ar.tolist(), predictions, 0.05, 0) # 5 cents return score
def earning_calculation(pred_list, fee_p): df = read_as_df("total.csv") train_data, test_data = df[0:int(len(df) * 0.8)], df[int(len(df) * 0.8):] train_arr = test_data['price'].values test_list = test_data['price'].values.tolist() # calculation baseline = np.mean(train_arr) inventory = 0 earning = 0 for i in range(len(pred_list)): if pred_list[i] < baseline * (1 - fee_p) and inventory < 10: inventory += 1 earning -= test_list[i] * (1 + fee_p) elif pred_list[i] > baseline * (1 + fee_p) and 0 < inventory: earning += test_list[i] * (1 - fee_p) return earning + inventory * test_list[-1]
def earning_calculation(pred_list: [], fee_p: float) -> float: df = read_as_df("total.csv") train_data, test_data = df[0:int(len(df) * 0.8)], df[int(len(df) * 0.8):] train_arr = test_data['price'].values test_list = test_data['price'].values.tolist() # calculation baseline = np.mean(train_arr) inventory = 0 earning = 0 total_val = 100000 # account initial values for i in range(len(pred_list)): if pred_list[i] < baseline * (1 - fee_p) and inventory < 10: inventory += 1 earning -= test_list[i] * (1 + fee_p) elif pred_list[i] > baseline * (1 + fee_p) and inventory > 0: inventory -= 1 earning += test_list[i] * (1 - fee_p) return earning + inventory * test_list[-1]
def test_write_file(self): unit_test_file = "unit_test.csv" write_as_new_file(unit_test_file, [["n1", 1], ["n2", 100]], ["col1", "col2"]) self.assertTrue(len(read_as_df(unit_test_file)) > 0)