後悔する権利

生きることは後悔する権利だと考えている。その権利を行使するかどうかはともかくとして、後悔しないよう生きていることは行きづらさに繋がるのではないか。どの後悔なら納得するかで生きていけば少しは楽になるのかも。

[コード付き]誰も知らない関連銘柄を、機械学習を使って素早く見つける

機械学習で株価を予想できないかな〜と思った人に、以前まあまあ読まれたこの記事。
WEB屋の自分が機械学習株価予想プログラムを開発した結果
役に立ったかどうかはともかく、思った以上にたくさんの人に、そして長期的に読んでもらえました。一説によるとアマゾンで前日まで買われてた言語入門書トップが今まではJAVAとC#だったのにこの記事が公開された次の日からPythonに塗り変わったとか。真相はわかりませんが記事のほうもいまだに少なくないアクセスが毎日あります。
「あれどうなったの?」といまでも興味を持って聞いてくれる方もたくさんいますので、それならばと満を持して実用的な検索システムを作ってみることにしました。
いきなりシステムを試したい人はこちらへどうぞ。
この記事では、どういった経緯とどういった考え方で作っているかを紹介していきたいと思います。

続きを読む [コード付き]誰も知らない関連銘柄を、機械学習を使って素早く見つける

凍ったバター

ふだんは患者でごったがえす病院の待合も、この三連休最終日の朝は人もまばらだ。
それもそもはず。祝日ということで表向きは外来を受け付けていないので、病院の待合はがらん堂だ。救急患者など特別な事情のあった患者だけが私を含めて5、6人、待合の長椅子に間隔をあけて膝を並べているのみである。
特別な事情のあった患者。私もその患者に当てはまるわけだが、特別といっても大した事情なわけでもない。前日に骨折して救急車で運ばれ、応急処置をうけた。整形外科の専門医は今日が当直なので、祝日だけどこうして通院したというわけだ。
私以外に待合にいる患者のほとんどは年配の方で、そのとき流行っていたインフルエンザの検査を受けていた。次々に呼ばれて、陽性だった陰性だったと結果を告げられて帰っていく。特に集団でうけているわけではなく、各々は個人で検査に来ているようだった。救急外来でもないこの人たちが、いったいどういう背景で休日の病院でゆっくり検査を受けていられるのか、その理由は私にはわからない。
インフルエンザの検査結果を告げられた患者が一人減り二人減り、待合には私ひとり残すのみとなった。
いや。
もう一人いた。
私の隣に少し間隔をあけて座る女性が、ひとり。

続きを読む 凍ったバター

死ぬ準備をするため、生きている


死ぬ準備をするために生きていると言うと、ひどくネガティブな言葉にとらえられるだろうか。実際のところはそうではなく、とてつもなく前向きに生きている。

父親が50歳で死んでしまったために、どうしても自分の人生設計が50歳までしか想像できない。実際にはピンピンしたまま生き続けて、120歳になるころに孫達にこの爺ちゃんいつ死ぬんかなと煙たがられるかもしれない。あるいは、明日死ぬかもしれない。どうしようもなく当たり前のこと過ぎて書くのも嫌だが、人間、いつ死ぬかなんてそんなにはっきりとはわからない。ただ、いつかは必ず死ぬ。

妻は私に家族を与えてくれた

陣痛で苦しむ妻を病院に向かわせるとき、もしかしたらこの玄関扉をくぐると妻は帰ってこられない可能性があることに戦慄した。
出産直後、出血が止まらず分娩室が騒然となった。次々と投入される収縮剤。慌ただしく動くスタッフたちをよそに何もすることができずただ見ているだけの私は、鉛のように重たく氷のように冷たい空気が、肺の中まで侵食してきたように、ただただ息苦しく何もできないでいた。妻の命のやり取りの現場で、ただただ息をひそめて見守る人でしかなかった。
結果的には経過も良好で、なんの問題もなく母子ともに健康で暮らせるようになった。思えば妻は常に喜びに満ち溢れ、否応なくノンストップで進む命のやり取りを受け入れ私に家族を与えてくれた。
いかに医療が進み出産が安全なものになったとはいえ、妻は家族のために命のやり取りを受け入れた。ならば私はどうなんだろう。あの日から私は私の役割について考え始めた。

私の役割は家族のために命を燃やすこと

この平和な世の中で、男である私が家族のために命をやり取りする機会はめっぽう少ない。仮にあったとしても、法律や道徳の問題であまり許された行為でないことのほうが多いだろう。出産という命のやり取りをした妻に対して相対的に私の役割がひどく軽いものになったような気がした。
だからというわけではないが、だからというわけでもある。
実際にはもう少し思考の紆余曲折を経て得られた結論なのだが、言語化できるほどまとまっているわけではないので、だからというわけで、という言葉にまとめてしまう。だからというわけで、私が家族にしてあげられることは、家族のために命を燃やし続けることだと思った。

生きることとは死ぬための準備だった

別に格好つけるわけでも極端なことを言うわけでもないのだが、どうしても思考の過程として以上のような考えのもとに生活をしているということは、事前情報として伝えておかないと、ここから先も話がしにくい。
私を含めた人間はいつか必ず死ぬ。
地震が来たら死ぬし津波が来たら死ぬ。雨が降ったら死ぬし車が来ても死ぬ。メディアが伝えるずっと昔から、暑かったら死んでたし寒くて死んだ人もいっぱいいる。下手なもの食べたら死ぬしたまたま居た場所に流行った病気にかかっても死ぬ。私も何かしらで死ぬに違いない。
だから生きよう。
もし明日死んだとき、家族が露頭に迷わないよう、小さな家を買った。
売ったら少しくらいのお金になるような、車も買った。
仕事に困らないよう、みんなが楽しく働けるような会社を作った。
ほかにも、家族が困ったとき、できるだけ近くの人にやさしくしてもらえるよう、私も地域のためにすすんで活動を続けた。
私の家族はとても優しい者たちなので、どうか誰からも好かれてほしい。私も誰からも嫌われないように、誰もを好きになった。
死ぬ準備が生きることと同義になった。

何をするにしても、死んだとしても家族にメリットが残せるか。常にそれだけを考えて行動した。
引き返せない怖さはある。
むしろ、怖さばかりだ。
それでもなお、誰かのためになり続けられるし、少なくとも家族のためになれる。何十年も前、死ぬこととか生きることの意味がわからず、溺れながら生きてた自分に伝えたい。命は燃え続けている。

だれ


町の小中学校が統廃合して、小中一貫校が出来るという話を聞いたとき、「ふーん、ええんちゃう」という考えしかなかった。
実際、リアルタイムで恩恵を受けるうちの子供は、友達が増えると喜んでたし。
ところが、机の上にあったビラを何気なく読んでいたら、少し興味が出てきた。
そこには、学校が無くなる地域の親御さんたちの困惑が切実に書かれていた。
自分たちの住んでる地域からいきなり学校が消えてしまう、同じ子育て世代の親御さんたち。何が困ってて何に恐れているのか、想像力のない私には、はじめはピンとこなかった。
ぜひとも話を聞きに行きたいと思って、ビラに書かれてある説明会に足を運んだ。

行った先の説明会は、予想してたのと違って、行政が行う住民説明会だった。困ってる側の人の話し合い会みたいなのを想像してたけど、やけに会場規模がでかいなと思ってたら、想像と違っていて、もっと規模のでかいものだった。
テレビでみたことあるような住民説明会で、はじめて行ったけどああいう場はちょっと苦手で、自分が来る場所を間違えたと思った。
でも、チラシを作った人たちの苦しみはよくわかった。

”学校というのは地域のコミュニティの場としても機能を備えているのは言うまでも無く、そのコミュニティをいきなり奪われる地域の人たちは苦しんでいるのだ”

それはそうなんだけど、それだけじゃなかった。
誰だって。わかっているのだ。
こうしたほうがいい、こうするべき、こうするしかない、きちんと、ていねいに説明をうけたはずの理屈。全て理解してるのだ。
わかっているからこそ、苦しんでいた。
理屈が通るからこそ、どうにもできない苦しみ。想像できるだろうか。

不意に。
不意に闘病中の母親を看取った経験がフラッシュバックした。
病気で苦しんでいるところ、やっと薬が効いてきて落ち着いた母親の寝顔。
あと2〜3日から1週間ほど、このまま苦しみ抜いて母親は死ぬ。
母親がこんな苦しみを受けなければいけない謂われは何も無かった。
助かるすべはない。
今なら。
今なら、誰も居ない。

そっと枕を抜き取って、ほんの5分ほど。
顔に押しつけるだけで済むはずだ。
おれだけが十字架を背負えば。
みんなが助かる。

何度も。
何度も考えが頭を巡った。
死が人生の敗北ならば、人は皆未来の敗北者だ。おれの母親がそんなはずはない。
死だってただの現象なはずだ。その現象を先延ばしにしたいばかりに、母親の人生を苦しみで埋めて終わらせる気か。
今。今おれが罪を背負えば、みんなが助かるんだ。
みんなって誰だ。
ずっとつきっきりで看病してる兄弟たちや、今目の前で苦しんでる母親だ。
理屈は全て整ってる。
今なら誰もいないんだ。
俺だけが。
俺だけがみんなを救える。
——お母さん。

2週間後、薄れゆく意識のなかで少し苦しみながらもおれたち兄弟からの言葉に応えるように微笑みながら、母親は天寿を全うした。
どうすればよかったのか、いまだにわからない。
これからどんな顔をして生きていけば良いのかも、わからないままだ。
罪を背負う覚悟がないままいたずらに死を先延ばしにして、苦しむ母親をただ見守ることしかできなかった弱い息子なのか、世間一般の常識から外れなかった賢い男なのか。
理屈は人を苦しめる。
考えれば考えるほど。


こうすればいいんですよ、こうしたほうがいいんですよ、こうするしかないんですよ。
わかる。わかるのだ。
わかるから苦しい。
今必要なのは説明なんじゃなく、聞くことなんじゃないかな、と思った。
聞いて、ともに考えること。
誰か聞いて。一緒に考えて。
ともに、過疎化する地に生きる者どうし。

機械学習で株価予想 実践編


2020/02/01 追記
[コード付き]誰も知らない関連銘柄を、機械学習を使って素早く見つける
こちらに最新の結果を載せました!


このブログって、もともとは技術の話題を避けるつもりでいたのに、やっぱり技術の話題で盛り上がってしまった。まあ、技術屋のブログなんて、そんなものなのかもね。
全体を通じて検証したいポイントは大きく二つ。

  1. 機械学習で株価は予想できるのか
    • 特にそれは、プログラミングの素養がもともとあるとはいえ、今から入門書を買い漁るようなレベルの自分のような街のWEB屋おじさんでも可能なのか
  2. 予測で出た結果に従って株を買い続けるとどうなるのか

そのなかでこの記事で検証したいのは一番目の「機械学習で株価は予想できるのか」です。
検証してみた結果、だめならだめでいいわけで、いい結果が出るならこんな夢のある話はないわけですよね。
それも、なんか高度な予測ができる環境や人材がそろっていなくても、街のWEB屋おじさんレベルの人が手持ちのノートパソコンでできるのであればそれすなわち誰でもできるようになるということで、みんなもさっさとプログラミングの入門書を買いに行った方がいい。

Python + Jupyter notebook という開発環境がすごいのは、ブラウザさえ動けば開発ができちゃうわけで、もし開発に使えるノートブックを持ってないなら3万円くらいのChromebookを買ったら開発ができるようになるってことですよね。
20数年前、朝は3時から起きて鉄筋工として働きながら、夜中3時まで父から借りたノートパソコンでプログラミングの勉強をして、参考書も買えないからわからないところがあったら本屋に立ち読みしに行って忘れないようにつぶやきながら家に帰ってプログラミングを繰り返し、寝不足で今日こそ現場で事故って死ぬかもと思いながらもゲーム作りをして、一人暮らしをしてて貧乏で電話回線が家にないから公衆電話にノートPCをつないでデータをアップロードして公開して、まだ世間に「インターネット」も「ノートPC」という言葉も浸透していなくて、はたから見ると作業着で頭金髪の兄ちゃんが夜な夜な怪しいことをしているようにしかみえずに幾度も警察に職質されて、いくら説明しても理解されなかったあのころの自分に教えてあげたい。その苦労の延長線上に、技術者の自分には夢が詰まっていると。

それではさっそくコードを書いていきましょう。
特に断りがない限り、anaconda3を使い、すべてのソースコードの前にはこのimport文が実行されているものとします。さらにコードはJupyter notebook上で実行しているものとしています。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
# Jupyter notebook用
from IPython.display import display, HTML, Image
%matplotlib inline

前回も書いたように、機械学習させるロジックはびっくりするほど簡潔にしています。突然の大高騰や大暴落を予測させるようなものではありません。また、機械学習しても予測しにくいデーターとか銘柄を、ばっさり切り捨てています。人間には予想しにくいデーターを機械学習で予測させるというよりは、「誰がどう見ても予想できる銘柄を、大量にある銘柄の中から機械が見つけてくる」というのを目的としているからです。
「そんな予測なんて実戦で使えるわけないのでは」という疑問は、テーマの二つ目である「予測で出た結果に従って株を買い続けるとどうなるのか」に掛かってきますよね。そのへんは日を改めて「シミュレーション編」とか「実際に売り買いしてみた編」とかを作って検証結果を発表していくとして、まずは注目を「機械学習で株価は予想できるのか」に絞って考えていきたいと思います。
なお、技術説明の中で、同じ意味のものでも「学習用データー」「教師用データー」「問題集」と表記がゆれたまま記述している箇所がいくつもあります。そういうレベルのブログであることをあらかじめ考慮に入れて読んでもらえれば幸いです。

学習させてみよう

まずは株価は上がるか下がるかを機械学習で予測できればゴールなので、「株価はいくら上がるか(下がるか)」までは予測できなくていいので、上がったか下がったかだけを学習させやすいように説明用にデーターを作っていきます。実際には本物の株価データーを使って学習させていくのですが、今ここで学習過程を説明するためにここでは仮のデーターを作っていきます。

train_X = np.array([1.0, 1.1, 1.2, 1.3, 1.4])
train_y = np.array([1])
plt.plot([1, 2, 3, 4, 5], train_X)


ウム!

これは今なにしているかというと、機械学習に学習させるデーターを作っています。
株価はいくら上がるか下がるかは予想しなくていいので、上がったか下がったかだけ学習させればいいので、そのようにデーターを作りました。
どういうことかというと、

train_X = np.array([1.0, 1.1, 1.2, 1.3, 1.4])

この部分。これは最初の株価と比べて1日後に1.1倍、2日後に1.2倍、4日後には1.4倍になったというデーターを作っています。
仮に最初が1000円だとしたら次の日は1100円、次の次の日は1200円、と増えていってる計算ですね。
最初が980円だと、次の日はその1.1倍で1078円、1.2倍で1176円と推移していきますね。そういうのが計算しやすいように、何円であるかは関係なくして、1から始めて何倍、何倍と動いているかだけをデーターにしているのです。
それに対し、次の部分、

train_y = np.array([1])

これは、6日後には株価が上がったのか下がったのか、上がっていれば1、下がっていれば0を答えとして教えています。
なんども言いますが、今回の予想ではいくら上がったかを予想しなくていいので、上がったか下がったかだけの結果を教えています。
こうやって、問題と答えの二つの変数を作って機械学習に教えてやります。
機械には5日間分のデーターだけと、6日目の答えだけを与えるわけですね。こうすることによって、今日を含む過去5日間の値動きのデーターだけを与えると6日目つまり明日の結果が予想できるようになるのです。
作った問題集を機械学習に教えてやります。

clf = DecisionTreeClassifier()
clf = clf.fit(train_X.reshape(1, -1), train_y)

これでパイソン君は問題と答えを覚えました。それではさっそく本番で予測してもらいます。

test_X = np.array([1.5, 1.6, 1.7, 1.8, 1.9])

5日間、こういう動き方をする株価だったら、6日後には株価は上がっているのでしょうか?それとも下がっているのでしょうか?

clf.predict(test_X.reshape(1, -1))

予測してもらう時にはこうします。結果は。

array([1])

と表示されました。
上がるか下がるかを1か0かで教えたので、予想結果も上がると予想するなら1、下がると予想するなら0と教えてくれるようになります。
結果は1。上がります!機械学習、賢い!
なんとなくわかってきましたでしょうか。どんどんやってみます。

train_X = np.array([1.0, 0.9, 0.8, 0.7, 0.6])
train_y = np.array([0])
plt.plot([1, 2, 3, 4, 5], train_X)


1.0, 0.9, 0.8, 0.7, 0.6と、5日間かけて下がり続けた結果、6日後にも株価が下がったパターン。これを学習させたうえで、
2.0, 1.9, 1.8, 1.7, 1.6と5日間動けば6日後にはどうなるのか。

clf = clf.fit(train_X.reshape(1, -1), train_y)
test_X = np.array([2.0, 1.9, 1.8, 1.7, 1.6])
clf.predict(test_X.reshape(1, -1))
array([0])

下がる!やばい!賢すぎる!!!!
おもしろい!!!どんどんいこう!!!

train_X = np.array([1.0, 0.5, 1.0, 0.5, 1.0])
train_y = np.array([0]) # 下がって上がると次は下がる
plt.plot([1, 2, 3, 4, 5], train_X)
clf = clf.fit(train_X.reshape(1, -1), train_y)
train_X = np.array([0.5, 1.0, 0.5, 1.0, 0.5])
train_y = np.array([1]) # 上がって下がると次は上がる
plt.plot([1, 2, 3, 4, 5], train_X)
clf = clf.fit(train_X.reshape(1, -1), train_y)


学習させた結果!!

# 上がって下がると次はどうなるのか!?
test_X = np.array([0.7, 1.1, 0.7, 1.1, 0.7])
clf.predict(test_X.reshape(1, -1))
array([1])

よくできたすごいぞおおおおおおおぉぉぉぉぉ!!!!

というわけで実際に作った、過去の株価から教師データーを作るソースコードがこちら。

# リターンインデックス
def get_ret_index(close):
    # データーが昇順(日付が過去が上になって最新が一番下)になっている前提
    returns = pd.Series(close).pct_change() # 騰落率を求める
    ret_index = (1 + returns).cumprod() # 累積積を求める
    ret_index.iloc[0] = 1 # 最初の値を 1.0 にする
    return ret_index
# 学習データーの作成
def train_data(arr, step):
    train_X = []
    train_y = []
    for i in range(0, len(arr) - step):
        end = i + step
        data = arr.iloc[i:end]
        close = data['adj_close']
        feature = get_ret_index(close)
        if close.iloc[-1] < arr['adj_close'].iloc[end]: # その翌日、株価は上がったか?
            # 上がっていれば1
            res = 1
        else:
            # 下がっていれば0
            res = 0
        train_X.append(feature.values)
        train_y.append(res)
    return np.array(train_X), np.array(train_y)

ももももうこれ株買いに行けるんちゃちゃちゃちゃうか?

待て。落ち着け。

  • 過去のデーターが大量にある。 ←ここまではいいです。
  • 過去のデーターを使って、教師データーという問題集を大量に作れる。 ←ここまでもいいです。
  • 問題集を大量に作れるので、機械にたくさん学習させられる。 ←「はい!ブー!過学習知らないのかよ!ばーかばーか」って山田君に言われたけど放っておこう。
  • 学習した結果が正しいか、誰がわかるの? ←ファッ!?

どういうこと?結果に従って、株を買えばいいんじゃないの?と思ったんですが、もし学習した結果が正しくなかったらお金を失いますよね。どうしましょう。
ここから途中のソースコードを保存していないので一気にいきますが、学習用問題データーとは別に検証用テストデーターを作らないといけないですよね。
株価なんていう複雑な動きをするデーターに、本物そっくりなテストデーターなんて作れるもんなんでしょうか?
ここで先人たちは、本物のデーターから無作為にテストデーターを抽出しておいて、学習用データーとはわけておくという引くくらい賢い解決策を講じています。そんな賢いこと思いつく人……機械学習なんていらんくらい頭いいやん……。
というわけで、例えば過去のデーターの2/3を学習用データーに使って、残りの1/3のデーターを使いテストして正解率を出せば、機械学習が最適に学習できたかわかるというわけですね。何遍も言うけど賢すぎて引く。

こんな賢いやりかたですが、まだデメリットがあります。
それは、できるだけデーターは学習用につかうほうもテスト用に使う方も大量に用意したい。せっかく用意したデーターを、学習用にもテスト用にも減らしたくない!っていうんです。用意したデーターをぜんぶ学習用に使いたいし、でもテストもしたいと言うんですね。えーい!わがままな!お前は2歳児か!!
これにはさすがに「そんなわがままいう子、お母さんしりません!勝手にしなさい!」と言いたかったところなんですが、なんと方法があるっていうです。用意したデーターを全部学習用にも使えてテストもできるっていう、機械学習開発者のわがままを全て満たしてくれる方法が。
それが交差検証法っていって、交差検証法のなかでもいくつかやり方があるんですが、今回やるのは学習用データーを何分割かして(例えば5分割)、ひとつをテスト用データーにつかい残りを教師用データーとしてもちいながら、テスト用データーを変えながら5回繰り返す、というやり方です。
図で説明するとわかりやすいんですが、わざわざ説明図を書くのも面倒なので、もうそのままソースコードのせます。ライブラリにそのものの機能が提供されているのでそれを使えば実際に使いながら試せたりします。

scores = cross_val_score(clf, train_X, train_y, cv=5)
mean = scores.mean()

meanで学習結果の正解率まで求められる。なんだろう、ツールの頭が良すぎて相対的に自分の頭の悪さが浮き彫りになってくるように思えて、アンニュイな気分になる。

そろそろ山田君の声にも耳を傾けた方がいい

山田君って何て言ってたっけ。てか山田君って誰?

山田君「ばーかばーか」

ああー!あのときの。
私がバカってのは事実なんだから別にいいんじゃない?いい気分はしないけど。

山田君「過学習知らないのかよ!ばーかばーか」

過学習…だと…!?
ああ、うん、過学習ね。えっと、うん。
オライリー社から出ている実践 機械学習システムでも一番最初に触れるのが、この未学習と過学習のジレンマでして、未学習つまり学習させなさすぎても正しい答えは得られないし、過学習つまり詰め込みすぎてもガチガチに頭が固くなってしまって未知のデーターに対して柔軟に答えを得られなくなるんですね。人間と同じで、ここが機械学習の面白いところです。
ではどうすればいいかというと、学習量を変えて総当たりで結果を求めて、一番正解率が高かった学習量を採用すればいいのではないかと考えて、次のようなコードを書きました。

def get_params(ccode, last_date, db):
    '''
    決定木に最適なパラメーターを総当たりで取得します。
    '''
    _top_mean = 0
    _data_length = 0
    _step = 0
    _min_samples_leaf = 0
    _max_depth = 0
    for data_length in range(30, 40, 10):
        for step in range(4, 12):
            for min_samples_leaf in range(1, 7):
                for max_depth in range(2, 8):
                    clf, train_X, train_y = lean(ccode, last_date, db, data_length, step, min_samples_leaf, max_depth)
                    scores = cross_val_score(clf, train_X, train_y, cv=5)
                    mean = scores.mean()
                    del clf
                    if _top_mean < mean:
                        _top_mean = mean
                        _data_length = data_length
                        _step = step
                        _min_samples_leaf = min_samples_leaf
                        _max_depth = max_depth
#     print("{}%, length:{}, step:{}, leaf: {}, depth: {}".format(int(_top_mean * 100), _data_length, _step, _min_samples_leaf, _max_depth))
    return _top_mean, _data_length, _step, _min_samples_leaf, _max_depth

盛大にネストしてますがそこはご容赦を。
例えば、上のほうに書いてある解説では5日分の問題データーを作っていますが、ここを7日分にすればどうでしょう?10日分では?過去300日のデーターをつかって5日分の量で予想させるのと、100日のデーターを使って7日分の量で予想させるのと、どちらが正解率が高いでしょうか?仮に答えが求まったとしても、ある銘柄だけに使えるパラメーターであって、他の銘柄にも使えるでしょうか?そういったものを全て総当たりで調べています。

こんな感じでシステムでは予想をしていくわけですが、このシステムでミソなのは、調べた結果、この機械学習で予想しにくい銘柄はばっさり切り捨てていることです。
今回は、予想しにくい銘柄の予想精度をあげることが目的ではなく、これだけたくさんある銘柄の中から予想しやすい銘柄を見つけ出していくことが目的だからです。
次に湧き上がる疑問が、「こんなに簡単な予想結果で、果たして本当に実用になるのだろうか」ですね。それは冒頭で書いたように「予測で出た結果に従って株を買い続けるとどうなるのか」というポイントになりますので、次回以降からしっかりシミュレーションしていけばいいわけです。
シミュレーションしてみて、だめならだめで別の方法試せばいいわけで。

いかがでしたでしょうか?
次回からは実際にシミュレーションの方法を書いていきます。自分の手法は全てオープンにしましたしソースコードまで公開したので、何かしらの参考にされて実際にもう自分で開発を進めている方ももしかしたらいるかもしれません。もし参考になりそうだと思うなら、ぜひ試してみてください。もしかしたらこれを読んだ方の中からは「こんなさんざん既出な方法、みんな試してると思うし少なくとも俺は試してるし実際役に立たなかったよ」という方もいるかもしれません。そういう情報が集まって、自分の中の機械学習の技術が全体的に高まるのであれば、これほど技術者冥利に尽きることはありません。
こうして話題になることが、若くて貧しくて愚かだったあの頃、今日こそ現場で死ぬかもと思いながらも技術に夢を持ち続けて現場仕事とプログラミングを覚えていたあの頃の自分へのプレゼントになることでしょう。
株価もおもしろいけど機械学習で小説もかいてみたいよね、ってことで自然言語処理の入門書なんかも読んでたりします。

WEB屋の自分が機械学習株価予想プログラムを開発した結果


2020/02/01 追記
[コード付き]誰も知らない関連銘柄を、機械学習を使って素早く見つける
こちらに最新の結果を載せました!


気づいたんですけど、私みたいな貧乏人はショッピングモールでおしゃれなゴミをせっせと買い漁るんですが、お金持ちの人って株を買うらしいんですよね。
考えてみれば貧乏人が欲しがるものって、百均のちょっとしたものから家や車やバイクやゲーム機など、買ったらお金が減るものばかりなんです。
それに比べて、お金持ちが買うものって、株や投資用の土地や、リスクこそあるものの貧乏人が欲しがらないわりに買ったらお金が増える可能性のあるものばかりなんですよねー。
これは悔しい!休日になるたびにせっせとショッピングモールにお金を運んでゴミを買い漁ってる自分を見てお金持ちはきっと笑っているに違いない!いやお金持ちには自分のような人間は視界にすら入らないのか、これはさっそく株を買わないと!と思って調べてみたんですが、正直よくわからなかったので、もうこうなったらコンピューターにまかせてしまおう!と思ったのがきっかけです。どうせコンピューター無かったら死ぬんだし。
続きを読む WEB屋の自分が機械学習株価予想プログラムを開発した結果

何々制限ダイエット?太ってるのに?


少し夜が更けた時間にコンビニに行くと、売れ残った鶏肉弁当が並んでいた。この弁当は確実に誰にも買われることなくあと数分で破棄されるのだろう。
この鶏肉になっている鳥は、生まれてから死ぬまで外の世界を見ることなくエサを食わせ続けられ、
機械に自動的に首を切られ逆さまにして血を抜かれ、
羽をむしられ内臓を捨てられ肉を細切れにされ、
弁当にされてトラックに運ばれ店に並べられ、
誰の手にもとられることなく何時間かしてゴミ箱に捨てられるだけの存在なのだろう。
この鳥の生命に意味はあるのか考えてみた。
少なくとも弁当を運ぶトラック運転手の生活を支えたことになり、コンビニバイトの時給の足しにはなったのかもしれない。
生まれてから自動的に首を切られて血と内臓を抜かれてゴミ箱に捨てられるだけの存在。
人間はずいぶんと傲慢になったものだ。
せめて食べた方がまだ救いがあるという点がさらに業が深い。

はっきり何と書くと嫌な気持ちになる人もいるだろうから、少し伏せた形で書こう。
私は何々制限ダイエットというものを信用していない。
伏せたつもりが伏せてないかもしれない。これではもっとモヤモヤさせてしまうだけだ。もういいや、はっきり書こう。
糖質制限ダイエット。ばかばかしい。
なにかを制限してダイエットしようということは、裏返していうと制限したもの以外を食おうとしていることにほかならない。
食うから太るのだ。何かを制限すれば食べ続けても痩せられると思っている時点で負けている。
「制限」っていう言葉がまた、何も犠牲にしてないくせにあたかも何かを犠牲にしているような態度が透けて見えて、ばかばかしさのリミッターを振り切っている。まだりんごでも食いまくっていたほうが、ばかっぽさにも愛嬌がある。

一日中座ったままなのに三食かかさず食べられる状態というのは、地球に動物が誕生して以来、一部の人間だけが、しかもここ数十年だけで起きている異常事態だということに気がつかなくてはいけない。
おばあちゃんが言ってたんだけど、「わたしらが子供のころは戦争でひもじ思いをしたがでよ。ほやけん、戦争が終わってからは自分の子供らにはひもじい思いだけはさせたくない思うてな。とにかく子供らに腹いっぱい食べさしたいがでよ。ほら、食べ食べ」ということで、戦争と経験した世代から下はあんまり空腹を覚えず育ってきた。
私達を育ててきた、愛情にあふれた「お腹がすくこと」へのタブー。
だから知らないのだ。
空腹と飢餓は違うということを。

だから恐れる。
ちょっと空腹になった時点で、これ以上腹を空かせたらどうにかなってしまうんじゃないかと、恐れて食べ物に手を伸ばしてしまう。
ちょっと腹を空かせたぐらい、人間は我慢できるということを知らない。

とにかく三食、朝昼晩と食べないと欠陥人間にでも育ってしまうんじゃないかという世間の風潮もある。
だから最初は恐ろしかった。
ダイエットのために朝食を食べないことが。

小腹を満たすために、加工肉を食べる習慣を捨てた。
肉が加工されて売られるようになって、人類の歴史上これも数十年が経った。
私達は実に気軽に獣の肉を食べるようになった。
昔はどうだったのだろうと、ふと思う。
こんなに気軽に肉を食べていては、各家庭の庭には貝塚のように動物の骨が隆々と盛られていたに違いない。
気軽に加工肉を食べる習慣がある人間の肩越しに見える、累々と詰まれた動物の骨。骨の山。骨骨骨。
骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨骨。
ちょっと小腹が減ったからと、毎日毎日、飼ってる鳥や豚を絞める。
子供のころ、鳥を絞めたときに最初に首をひねった記憶と生きたまま直接首を切った両方の記憶があるのだが、どっちがどうだったかはあまり覚えていない。
明確に覚えているのは、首を切ったのに、首から血を吹き出しながらまだ数歩と歩くニワトリの生命力のすごさだ。
血抜きをしたらそのあと羽をむしって腹を裂いて内臓を取り出し体をバラバラにして鍋に放り込む。
手についた血はなかなかとれない。肉を食うとはそういうことだった。

食べることの、ある種のおぞましさ。
食欲を抑えられないことは、性欲を抑えられないことと同じくらい怖い。

「正宗さん最近痩せましたよね。何か特別なダイエットしてるんです?(それともヤバイ病気でそろそろ死ぬんです?)」
とよく聞かれるので、こう答えている。
「(朝は食わずに昼は野菜だけ食べて、夜はうどんです)病気じゃないし死なないと思います」
聞いた方はだいたい、意味がわからないといった顔をする。

フリーランスウェブプログラマーが何か面白いこと言います。