元ネタは、2023年にアップロードされたstockmark-future-prediction
![](https://cdn-thumbnails.huggingface.co/social-thumbnails/models/foduucom/stockmarket-future-prediction.png)
というものです。
hugging faceを漁っていたら見つけました。試したこと無かったので、試してみます。
内容としては、株価チャートが与えられたら、その後のトレンドを検出するモデルのようです。
![foduucom/product-detection-in-shelf-yolov8](https://emoclework.jp/wp-content/uploads/2024/06/image.jpeg)
他に検証している人が見当たらなかったので、自分で動かしてみることにしました。
実行環境
Dockerfile
前に作ったhugging faceの実行環境をベースに構築しました。yoloしか入れないので、ここまでいろいろと入れなくても、動くと思います。
FROM nvidia/cuda:12.1.0-runtime-ubuntu20.04
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get update \
&& groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME \
&& apt-get -y install locales \
&& localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
RUN apt-get -y update \
&& apt-get install -y software-properties-common \
&& add-apt-repository ppa:deadsnakes/ppa
RUN apt install -y bash \
build-essential \
git \
git-lfs \
curl \
ca-certificates \
libsndfile1-dev \
libgl1 \
python3.10 \
python3-pip \
python3.10-venv && \
rm -rf /var/lib/apt/lists
# make sure to use venv
RUN python3.10 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# pre-install the heavy dependencies (these can later be overridden by the deps from setup.py)
RUN python3.10 -m pip install --no-cache-dir --upgrade pip uv==0.1.11 && \
python3.10 -m uv pip install --no-cache-dir \
torch \
torchvision \
torchaudio \
invisible_watermark && \
python3.10 -m pip install --no-cache-dir \
accelerate \
datasets \
hf-doc-builder \
huggingface-hub \
Jinja2 \
librosa \
numpy \
scipy \
tensorboard \
transformers \
pytorch-lightning
RUN pip install ultralyticsplus==0.0.28 ultralytics==8.0.43
devcontainer.json
名前とサービス名を決定してください。また、必要な拡張機能を入れてください。筆者は、pythonの拡張機能とjupyter notebookの拡張機能をいつも入れています。
{
"name": "yolov8s_stockmarket_future_prediction-test",
"service": "yolov8s_stockmarket_future_prediction-test",
"dockerComposeFile": "docker-compose.yml",
"remoteUser": "vscode",
"workspaceFolder": "/work",
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-toolsai.jupyter"
]
}
}
}
docker-compose.yml
設定したサービス名を間違えないでください。
また、GPUを使うので、GPUが使えるようにdeployを書き足します。
version: '3'
services:
yolov8s_stockmarket_future_prediction-test:
container_name: 'yolov8s_stockmarket_future_prediction-test-container'
hostname: 'yolov8s_stockmarket_future_prediction-test-container'
build: .
restart: always
working_dir: '/work'
tty: true
volumes:
- type: bind
source: ..
target: /work
ulimits:
memlock: -1
stack: -1
shm_size: '10gb'
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
実行プログラム
元のURLにもHow to Get Startが書かれているので、それを参考にテストコードを書いてみます。
リモートDocker環境なので、renderingはしません。predictの引数に保存フラグを立てておけば、検出画像が出力されます。
from ultralyticsplus import YOLO, render_result
import cv2
# load model
model = YOLO('foduucom/stockmarket-future-prediction')
# set model parameters
model.overrides['conf'] = 0.25 # NMS confidence threshold
model.overrides['iou'] = 0.45 # NMS IoU threshold
model.overrides['agnostic_nms'] = False # NMS class-agnostic
model.overrides['max_det'] = 1000 # maximum number of detections per image
# set image
image = 'images/week_chart_02.png'
# perform inference
results = model.predict(image, save=True, save_txt=True, save_conf=True)
# observe results
print(results[0].boxes)
特に、エラーもなく実行できました。モデルもhugging_faceから自動でダウンロードしてくれるようです。
次に、チャート画像を用意する必要があります。
YAHOOファイナンスから、日経平均の株価チャートをスクショしてきました。次の五枚です。
![](https://emoclework.jp/wp-content/uploads/2024/06/day_chart_01.png)
![](https://emoclework.jp/wp-content/uploads/2024/06/day_chart_02.png)
![](https://emoclework.jp/wp-content/uploads/2024/06/day_chart_03.png)
![](https://emoclework.jp/wp-content/uploads/2024/06/week_chart_01.png)
![](https://emoclework.jp/wp-content/uploads/2024/06/week_chart_02.png)
日足と週足、期間を変更させた5枚です。
元のサンプル画像とはローソク足の色が違いますが、大丈夫でしょうか?
実行結果
プログラムを実行するとruns/detect/predictというディレクトリに検出結果が吐き出されます。
今回、5枚中3枚は何も検出してくれませんでした。しかし、次の二枚はUpおよびDownが検出されました。
![](https://emoclework.jp/wp-content/uploads/2024/06/day_chart_02-1.png)
![](https://emoclework.jp/wp-content/uploads/2024/06/week_chart_02-1.png)
引き目の二枚しか検出されなかったので、もしかしたら、短期のチャートはうまくいかないのかもしれません。
検出精度ですが、1枚目は当たっているような気がします。
しかし、二枚目のdown2つは、実際には株価は下落していないので、外れています。
というか、最初から思っていましたが、ボックスの未来情報を全体画像として与えているので、外れてしまうのは、検出精度が低いのではないでしょうか?
また、predictionと名前が付いていますが、チャートの解析には利用できても、実際の取引には使えなさそうです。
もっと検出ボックスが、右側にあれば、未来予測として機能しそうなのですが…
まとめ
今回は、hugging faceにあったstockmark-future-predictionを試してみました。
動かすことはとても簡単にできました。
しかし、株式取引の自動化等に使えるような方法ではなさそうでした。
しかし、視覚的には見てて面白いので、なにかのデモやチャート分析には使えそうです。