{"id":18941483,"url":"https://github.com/mchmarny/stocker","last_synced_at":"2026-03-23T21:30:18.775Z","repository":{"id":77051964,"uuid":"185096408","full_name":"mchmarny/stocker","owner":"mchmarny","description":"Using tweeter sentiment and stock market price signal correlation to predict next day closing price","archived":false,"fork":false,"pushed_at":"2019-05-09T03:22:28.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-31T22:42:57.601Z","etag":null,"topics":["bigquery","ml","prediction","regression-models"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mchmarny.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-06T00:08:08.000Z","updated_at":"2019-05-09T03:22:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"484c0235-3f62-4466-bd45-c8b820342ad5","html_url":"https://github.com/mchmarny/stocker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fstocker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fstocker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fstocker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchmarny%2Fstocker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mchmarny","download_url":"https://codeload.github.com/mchmarny/stocker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239942599,"owners_count":19722328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bigquery","ml","prediction","regression-models"],"created_at":"2024-11-08T12:28:15.439Z","updated_at":"2026-03-23T21:30:16.698Z","avatar_url":"https://github.com/mchmarny.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# stocker\n\nUsing tweeter sentiment and stock market price signal correlation to predict next day closing price.\n\n\u003e Note, this is for demonstration purposes only. I know literally nothing about the stock market. You should not use this demo to make or support your financial decisions. DON'T DO IT!\n\nDependant components\n\n* [stockercm](https://github.com/mchmarny/stockercm) - Twitter data source\n* [stockermart](https://github.com/mchmarny/stockermart) - Stock market data downloader\n* [stockercm](https://github.com/mchmarny/stockercm) - Sentiment processor\n\nOnce you get the data flow configured using these components, you can follow the following linear regression model creation, its evaluation against your data set, and running predictions using the trained model.\n\n## Create Model\n\n```sql\n#standardSQL\nCREATE OR REPLACE MODEL stocker.price_model\nOPTIONS\n  (model_type='linear_reg', input_label_cols=['price']) AS\nSELECT\n  p.price,\n  p.closingPrice as prev_price,\n  c.symbol,\n  c.magnitude * c.score as sentiment,\n  CAST(c.retweet AS INT64) as retweet\nFROM stocker.content c\nJOIN stocker.price p on c.symbol = p.symbol\n  AND FORMAT_TIMESTAMP('%Y-%m-%d', c.created) = FORMAT_TIMESTAMP('%Y-%m-%d', p.quotedAt)\nWHERE c.score \u003c\u003e 0\nAND RAND() \u003c 0.01\n```\n\nresults in\n\n```shell\nThis statement created a new model named stocker.price_model\n```\n\n\n## Evaluate model\n\n```sql\n#standardSQL\nINSERT stocker.price_mode_eval (\n   eval_ts,\n   mean_absolute_error,\n   mean_squared_error,\n   mean_squared_log_error,\n   median_absolute_error,\n   r2_score,\n   explained_variance\n) WITH T AS (\n  SELECT\n    *\n  FROM\n    ML.EVALUATE(MODEL stocker.price_model,(\n      SELECT\n        p.price,\n        p.closingPrice as prev_price,\n        c.symbol,\n        c.magnitude * c.score as sentiment,\n        CAST(c.retweet AS INT64) as retweet\n      FROM stocker.content c\n      JOIN stocker.price p on c.symbol = p.symbol\n        AND FORMAT_TIMESTAMP('%Y-%m-%d', c.created) = FORMAT_TIMESTAMP('%Y-%m-%d', p.quotedAt)\n      WHERE c.score \u003c\u003e 0\n  ))\n)\nSELECT\n  CURRENT_TIMESTAMP(),\n  mean_absolute_error,\n  mean_squared_error,\n  mean_squared_log_error,\n  median_absolute_error,\n  r2_score,\n  explained_variance\nFROM T\n```\n\nresults in\n\n```shell\nmean_absolute_error\t mean_squared_error\t mean_squared_log_error\t median_absolute_error\tr2_score            explained_variance\n3.2502161606238453   227.0738450661901   0.008387276788977339    0.12880176496196327    0.9990422574648288  0.999079865551752\n```\n\n\u003e The R2 score is a statistical measure that determines if the linear regression predictions approximate the actual data. 0 indicates that the model explains none of the variability of the response data around the mean. 1 indicates that the model explains all the variability of the response data around the mean.\n\n# Use your model to predict stock price\n\n```sql\n#standardSQL\nINSERT stocker.price_prediction (\n   symbol,\n   prediction_date,\n   after_closing_price,\n   predicted_price\n) WITH T AS (\n\n  SELECT\n      dt.symbol as symbol,\n      p.closingPrice as after_closing_price,\n      ROUND(AVG(dt.predicted_price),2) as predicted_price\n  FROM\n    ML.PREDICT(MODEL stocker.price_model,\n      (\n      SELECT\n        p.price,\n        p.closingPrice as prev_price,\n        c.symbol,\n        c.magnitude * c.score as sentiment,\n        CAST(c.retweet AS INT64) as retweet\n      FROM stocker.content c\n      JOIN stocker.price p on c.symbol = p.symbol\n        AND FORMAT_TIMESTAMP('%Y-%m-%d', c.created) = FORMAT_TIMESTAMP('%Y-%m-%d', p.quotedAt)\n  )) dt\n  join stocker.price p on p.symbol =  dt.symbol\n  where p.closingDate = FORMAT_TIMESTAMP('%Y-%m-%d', CURRENT_TIMESTAMP(), \"America/Los_Angeles\")\n  group by\n    dt.symbol,\n    p.closingPrice\n\n)\nSELECT\n   symbol,\n   FORMAT_TIMESTAMP('%Y-%m-%d', CURRENT_TIMESTAMP(), \"America/Los_Angeles\"),\n   after_closing_price,\n   predicted_price\nFROM T\n```\n\n## Predictions\n\n```sql\nSELECT\n  symbol,\n  prediction_date,\n  after_closing_price,\n  predicted_price\nFROM stocker.price_prediction\ngroup by\n  symbol,\n  prediction_date,\n  after_closing_price,\n  predicted_price\norder by 1, 2\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchmarny%2Fstocker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmchmarny%2Fstocker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchmarny%2Fstocker/lists"}