レビュー2章 推薦システム―統計的機械学習の理論と実践―

前回に続き

レビュー 推薦システム―統計的機械学習の理論と実践― - tiruka’s blog

 

第2章の前半は、素性ベクトルベースのレコメンドについて説明している。素性ベクトルとは、「特性」と言い換えることができる。アイテムなら価格やブランド、カテゴリーや、非数値データではキーワードや画像などである。ユーザでは、年齢、性別、購買履歴などである。要は、それぞれに紐づけることができるデータを、素性ベクトルという。何個も特性がある場合は、ベクトルと言い換えることが多いですね、この世界は。

 

アイテムベースではアイテムに関する特性素性ベクトルをたくさん集め、類似度を測ることについて説明。素性ベクトルとして色々な数値化できるデータや、バグオブワーズとしてテキストを用いる方法などが紹介されている。

難しいことを言っているが、基本的にはダミー変数や、テキストならtfidfを用いればできるということである。

 

ユーザーベクトルではユーザーに関する素性ベクトルを利用して、ユーザの嗜好に近いアイテムを提示する方法を示している。例えば、ユーザAに、「温泉、憩い」などのメタを貼り付けることができれば、それらの「メタ」を持っているアイテムをレコメンドすることができる。

 

いずれも、各アイテムにスコアなどをつけて、スコアが高いものからレコメンドする。

 

類似度を測る関数としては、jaccard(データが0,1の場合に強い)やコサイン類似度などが出されている。いずれにしろ、ベクトル化した際の距離(norm)が近いものが、似ているのである。

 

後半から協調フィルタリングの話になるが、量はわずかである。まず、ユーザー同士の類似度を測る「ユーザベース協調フィルタリング」を紹介している。基本的には、似ているユーザが選んだものは、選ぶ可能性が高い、という直感的な考えに基づいている。

同じ発想で、アイテム同士で似ているものを出せば、選ぶ可能性が高いというのが、アイテム協調フィルタリングである。

 

類似度を測る関数としては、ピアソン相関関数が協調フィルタリングでは出されている。前述の関数を使っても良いと思う。

 

続く

レビュー 推薦システム―統計的機械学習の理論と実践―

以下引用

推薦システムの構築を検討しているエンジニアにとって,現実的な課題に対峙するための知識を得るために最適な一冊。

本書は,推薦システムにおける課題設定,理論およびシステム構築の複雑な概念を,著者の大規模システムでの開発/運用事例をもとに具体的な説明を行っている。理論と実践の両面から記述している書籍は少ないが,本書では理論と実践のギャップを埋めるように解説している。また,実システム上でのモデルの効率的なアップデートやコールドスタート問題などの現実的に直面する問題への対応や,多目的最適化についても述べており,現実世界の問題を解くための足がかりとなる内容となっている。推薦システムの構築について,古典的手法から応用的手法までを,各手法の課題に触れながら説明しているため,実務で応用可能な理論的/技術的な知識を獲得することが出来る。

 

www.kyoritsu-pub.co.jp

 

と紹介されているので、読んでみました。

「実践は言いすぎかなぁ(いや、でも私が『実装』をちょっと期待していただけかな)」と「難しく言うための専門的表現方法が手に入りそう」です。

長くなるので、各章ごとにレビューを載せていきます。

 

今日は第1章。

第1章は全体の概要について説明。薄いのであんまり書くことないですね。↑の紹介文をそのまま言っている感じです。

 

続く

レビュー2章 推薦システム―統計的機械学習の理論と実践― - tiruka’s blog

OSS利用はオープンにする?クローズにする?

今時の企業で、OSS(Open Source Software)を使用していない企業はほぼないと思います。特に、ベンチャー企業ではそうでしょう。

 

私の勤めている会社でも、コア技術としてOSSを利用していますが、その中でちょっときになる会話が社内でありました。

「あんまりXXXという会話が出ていると不安」
「お客さんには、XXXを使用しているとは言わない」
「XXX関連のファイルやディレクトリは、AAAに統一する(もしお客さんが見ても分からないように)」

以上は経営層からの発言です。要は、何のOSSを使用しているかを知られたくない、ということでしょう。

エンジニアからすると、これらの指示に従うのははっきり言ってめんどくさいです。

なんとなく、

「弊社独自の技術を使用して、最適化を計っています。」
「弊社開発のアルゴリズムを採用しています」

とか、かっこいいことを営業的に言いたいのはわかるんですが、盛りすぎな気がします。ライセンスの観点から問題がなければ、問題ないのでしょうが。ある種、「うちはこの技術を使っています!」という方が、好感が持てますね。

 

社会人になる前は、独自技術とアピールされると、「どんなすごい独自技術を使っているんだろう?すごいなぁ」と思っていましたが、ちょっと経つとそんな感動はどこかへ失せました。

使用言語を見れば、だいたい何のOSSを使っているか見当つきますね。

 

一番かっこいいのは、自社で開発していて、それを使用していることでしょうか。まぁ、OSSを使いこなすだけでもすばらしいですね。

でも、もし自分が経営側だったら、同じことを指示するのかなぁ。どこで線を引くかの問題かな。

 

mysql8 > mysql5.7 by brew

MySQLはもっとも世界で使用実績のあるDBであり、私も、私の勤める企業でも使用しています。2018年5月にはメジャーバージョンが切り替わり、8.0となりました。再帰SQLへの対応や、トランザクションの強化などいろいろ強化されています。

詳しくは、こちらのブログ(界隈では非常に有名です)か公式をどうぞ。

漢(オトコ)のコンピュータ道: MySQL 8.0登場!立ち止まることを知らない進化はこれからも続く。

MySQL :: MySQL 8.0 Release Notes

 

会社では、Pythonで開発することが多く、mysqlclientを使用しています。mysqlclientでmysql8に接続する場合は、/etc/my.cnfで下記を追加して、セキュリティを変更しなければなりません。

default_authentication_plugin= mysql_native_password

 

弊社では、まだ5.7を使用していますが、そのうち8になるかなぁとは思うので、メモしておきます。 さて、ローカルのMacで開発する際は、便利なのでHomebrewを使ってmysqlをインストールするのですが、こちらもデフォルトでインストールするバージョンは8にすでになっています。早いですね。でも、8だと動かないし、環境違うのは避けたいんだよな。デグレードしなくちゃ

 

とうことで、うっかり普通にbrew install mysqlとやってしまったけど、バージョン指定したいときの方法を書いておきます。

brew remove mysql
brew cleannup
(もしくは下記コマンドで直接消す)
sudo rm -r /usr/local/Cellar/mysql/ (本体を消す)
sudo rm -r /usr/local/var/mysql/ (設定ファイルを消す)

brew install mysql@5.7
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile (パスを通す)
ln -sfv /usr/local/opt/mysql@5.7/*.plist ~/Library/LaunchAgents(自動起動する)
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist

 

あと、Pythonのmysqlclientなどのように、ラッパーライブラリから呼び出す際は、

それらのライブラリが/usr/local/opt以下を見に言って、mysqlを実行するのですが、下記みたいなエラーが出ることがあります。

ImportError: dlopen(/Users/hoge/anaconda3/lib/python3.6/site-packages/_mysql.cpython-36m-darwin.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

 

上を見ればわかりますが、/usr/local/opt/mysql ではなく、/usr/local/opt/mysql@5.7になっています。なので、エラーになります。しまいには、Did you install mysqlclient?と、「おまえ、myclient使おうとしてるけど、インストールしてんの?」と聞かれます。してるわ。

ということで、名前を変えます。ここにあるのは、全てシンボリックリンク です。

cd /usr/local/opt
mv mysql@5.7 mysql
(たぶん、すでにmysqlいうシンボリックリンク があるので、それはrmで消しておきます)

もし変更した場合は、上のパスと自動起動も変更しましょう。

 

 

 

yarn add package.json

JavaScriptは日進月歩が激しい世界で、四半期もすればパッケージ依存が代わり、新しくインストールしても動かないなんてことがざらにあります。

 

つまり、例えば3カ月間に書かれたブログかなんかで、下記みたいなコマンドでインストールして、いろいろ試していたので、「ようし、やってみよう!」と思って同じコマンドでインストールしても「あれ?エラーが出て動かない」ということが普通に起こります。

webpack-dev-serverもバージョンアップして、追加でwebpacke-cliが必要になっていました。

 

パッケージのインストールは、環境構築段階で、ここでこけるとなかなか前に進めないし、依存関係を理解してアップグレード・デグレードを適切にするのは、容易じゃありません。

 

ということで、みんなpackage.jsonをちゃんと置いて欲しいなぁと思います。

自分のを置いてきます。yarn add pakage.jsonでインストールして、webpackや、reactを問題なく動かせます。そういえば、いつの間にか、yarn installじゃなくなっている。

 

{
  "name": "react_lesson",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "start": "./node_modules/.bin/webpack-dev-server"
  },
  "dependencies": {
    "axios": "^0.16.2",
    "babel-core": "^6.25.0",
    "babel-loader": "^7.1.1",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "css-loader": "^0.28.4",
    "extract-text-webpack-plugin": "^3.0.0",
    "geolib": "^2.0.22",
    "import-glob-loader": "^1.1.0",
    "lodash": "^4.17.4",
    "node-sass": "^4.5.3",
    "package.json": "^2.0.1",
    "prop-types": "^15.5.10",
    "query-string": "^5.0.0",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-google-maps": "^7.2.0",
    "react-redux": "^5.0.6",
    "react-router-dom": "^4.1.2",
    "redux": "^3.7.2",
    "redux-devtools": "^3.4.0",
    "redux-devtools-extension": "^2.13.2",
    "redux-thunk": "^2.2.0",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.18.2",
    "webpack": "^3.3.0",
    "webpack-dev-server": "^2.5.1"
  },
  "devDependencies": {
    "eslint": "^3.19.0",
    "eslint-config-airbnb": "^15.0.2",
    "eslint-plugin-import": "^2.7.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-react": "^7.1.0"
  }
}

株式投資にもルールが必要

株式投資で「やっちまった」ので、反省として記載します。

 

2018/08/28

SPDRは、心理的抵抗線の2900(2018年の最高値ライン、これを2月に記録してから2600まで暴落した)を超えたから、しばらく一気に上がっていく気がする。もし3000を超えたら、大台を超えたと言う心理が働いて、また上がると思う。3200くらいは、今年行くかも。

 

2018/10/10

かなり甘い見通しだったかなぁ。アップダウンを繰り返していて、2870くらい。StopMarketを入れていたら、売ってしまっていた。もう1回買うことにする(アホだな)。往復の手数料だけで、5,000円くらい損している。

 

2018/10/11

株価は、暴落した。3%以上暴落した。気分でやるからこうなるんだな。「(機会)損失をしたくない!」という気持ちが、今回の失敗だ。しっかり、ルールと戦略、数値による判断をしないとダメだ。

 

唯一のよかった点は、すぐに「間違っている」と判断して、手仕舞いしたこと。

ルール整備まで、一旦落ち着こう。ストップトレール導入した方がいいかな。

不動産仲介会社をもっとうまく活用しよう

前回に続き、不動産の話です。今回は、どうやったら不動産仲介会社をもっとうまく活用できるかに焦点を当てています。

結論としては、「どこでもいいから探してもらって、契約は仲介手数料が安いとこでする」です。

tiruka.hatenablog.jp

 

前提としてですが、業界としての競争は激しそうです。参入障壁が低いので、雨後の筍のようにどんどん新しい会社が入って来ます。差別化も難しいです。客に来てもらうのは結構大変そうだなぁとは思います。

というわけで、まずは価格競争が手段の1つになります。仲介手数料を安くします。仲介手数料一律3万円とか唱っているところもあります。どこの不動産仲介会社を使っても物件は同じなので、そりゃあ安いところを使った方が良いですよね。みなさんも、物件探しはどこの仲介会社を使っても良いので、契約する際は安いところに相談しましょう!

え?なんか申し訳ないって?大丈夫です。お世話になった気がするのは、本当に気がしているだけで、何にもお世話になっていないですから。デパートで接客してもらう方が、お世話になっていると思います。

まだ納得できない?では数字で示しましょう。

お世話になる時間は、実際にあっている時間と資料などを作成する時間くらいでしょうか(「似たような物件探します!」とか言いますが、あてにはならないです)。時間にすると10時間くらいとしましょう。その営業担当者の時給を2000円くらいにしましょうか。そうすると、2万円くらいのコストが発生していますね。

では、あなたはいくら払うのか。だいたい家賃の1ヶ月くらいですよね。もし家賃が10万円の物件を契約したら、あなたは10万円を仲介手数料として払うわけです。仲介会社のリターンは、実に5倍です!家賃が2万円以上の物件ならば、ほぼ損することがないでしょう。客が即決ならば、10時間もかけませんね。契約書なんて、テンプレートですから、ちょっと埋めてハンコ押すだけです。

え、今度は営業担当者がかわいそうだって?なるほど。何某の忍耐は必要そうに見える不動業界ですが、それはどんな仕事でも一緒、特に営業は同じだと思うので、遠慮はいりません。あなたも、一生懸命頑張ったのに、契約もらえなかったとか、評価してもらえなかったことありますよね?私はありますよ。それと同じです。いちいち気に留めて要られません。

それに、そんなに親身になって聞いてくれていませんよ。我々は、たくさん来るお客さんの一人にすぎません。カモになってやる必要はないです。他の人がカモになるから、大丈夫です。

もっとインパクトのある数字を示しましょうか。実は、不動産営業マンの給料は高いのです!

不動産営業の年収は高収入!賃貸とマンション売りの営業年収を解説!

この記事によれば、2024歳でも平均年収は450万円ほど、30歳越えれば600万円を越えて、どんどん上がって生きます。年齢に関係なく、日本の平均年収は400万円ほどですから、けっこうもらっていますね!まぁ歩合制が基本で、ブラックだったり、リスクがあったりするんでしょうが、それを織り込んでいるからこそのこの比較的高めの年収です!我々が契約しないで他で契約しちゃうなんてストレス(?)も織り込まれているから大丈夫です!そもそも、他で契約しても、彼らがそれを知る由はないですので、彼らの心労も心配無用ですね!