def train_n_invest_twins(self, corp_code, corp_name, no) -> list: """겨별 세션과 통합세션에서 예측한 값의 평균을 예측값으로 한다.""" stocks = Stocks(self.params) trains_data = TrainsData(self.params) learning = Learning(self.params) params_all = GlobalParams('ALL_CORPS') learning_all = Learning(params_all) invest = MockInvestment(self.params) stock_data = stocks.get_stock_data(corp_code) data_params, scaler_close, dataX_last = trains_data.get_train_test( stock_data) tp = learning.learn(corp_code, corp_name, data_params) tp_all = learning_all.learn(corp_code, corp_name, data_params) ip = invest.invest_n_all(corp_code, dataX_last, data_params, params_all, scaler_close) tp.test_rmse = np.mean([tp.test_rmse, tp_all.test_rmse]) tp.train_count = tp.train_count + tp_all.train_count return self.get_train_invest_result(no, corp_code, corp_name, stock_data, tp, ip)
def train(self, corp_code: str, corp_name: str, stock_data: pd.DataFrame, scaler_close: preprocessing.MinMaxScaler = None, invest_only: bool = False) -> TrainParams: """입력한 회사에 대해서 학습시킨다""" trains_data = TrainsData(self.params) learning = Learning(self.params) data_params, scaler_close, dataX_last = trains_data.get_train_test( stock_data, scaler_close) if invest_only: tp = learning.get_test_rmse(corp_code, data_params) else: tp = learning.learn(corp_code, corp_name, data_params) tp.scaler_close = scaler_close tp.dataX_last = dataX_last return tp
def train_n_invests_for_all(self, corps): """입력한 회사들에 대해서 학습시키고 모의투자를 실행한다.""" stocks = Stocks(self.params) trains_data = TrainsData(self.params) learning = Learning(self.params) invest = MockInvestment(self.params) list = [] for index, corp_data in corps.iterrows(): corp_code = corp_data['종목코드'] corp_name = corp_data['회사명'] try: stock_data = stocks.get_stock_data(corp_code) data_params, scaler_close, dataX_last = trains_data.get_train_test( stock_data) except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stdout) continue list.append({ 'corp_code': corp_code, 'corp_name': corp_name, 'scaler_close': scaler_close, 'dataX_last': dataX_last, 'data_params': data_params, 'stock_data': stock_data }) all_data_params = self.gather_data_params(list) tp = learning.learn("ALL_CORPS", "ALL_CORPS", all_data_params) invest_daily_data = [] comp_rmses = [] index = 1 for item in list: corp_code = item['corp_code'] corp_name = item['corp_data'] dataX_last = item['dataX_last'] data_params = item['data_params'] scaler_close = item['scaler_close'] stock_data = item['stock_data'] ip = invest.invest(corp_code, corp_name, tp) visualizer = LearningVisualizer(self.params) visualizer.draw_predictions(corp_name, scaler_close, data_params, tp.test_predict, ip.predict_list) result, invest_daily = self.get_train_invest_result( index, corp_code, corp_name, tp.test_rmse, ip.last_money, ip.index_money, tp.train_count, stock_data, data_params, scaler_close, ip.last_predict) if invest_daily != None: invest_daily_data.append(invest_daily) comp_rmses.append(result) index += 1 df_comp_rmses = pd.DataFrame(comp_rmses, columns=self.result_columns) DataUtils.save_csv(df_comp_rmses, self.get_result_file_path()) if len(invest_daily_data) > 1: try: visualizer = InvestVisualizer(self.params) return visualizer.draw_invest_daily(invest_daily_data, corps) except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stdout)