いい生活インターンシップ備忘録

どうも皆さん、森田拓朗です。

インターンシップ紹介記事第2弾を今さらやります。

バカ頭おかしかったので、記事を下書き状態にしてすっかり忘れてしまっていたので、ちょうどインフルエンザ流行りだすくらいの季節に、

まさかのサマーインターン記事公開です。

今回お世話になった企業は、日本の不動産IT分野で最前線を走る「いい生活」さんに行ってきました。(こちらWebページであります。)

自分の在籍する長岡技大では長期実務訓練という制度があり、それで何回か学生を受け入れてくれていることから、中々ご縁がある企業さん。

技大で行われた会社説明会の時に、その怪しい企業名と裏腹に、「ビジョンとミッション」が(韻踏んでる)凄くカッコよくて胸を打たれたことを覚えています。

不動産という非効率な作業が多い業界に、クラウド技術を用いたITシステムを噛ませることによって、業務の改善を図ることを最初の目標とし、

最終的な目標はサービスで獲得したデータを基に、不透明な価格設定が残る不動産業界に対して、蓄積データなどから価格設定などを透明化。また決済フローなどもシステムによって改善していくことで、これからのフェーズではどんどんエンドユーザーの我々に還元すると仰っていました(素敵)

やっているサービスが目標への道程に対し、矛盾がなくめっちゃわかりやすい。

そして市場規模やサービスの対象ユーザーへの範囲もめちゃくちゃ広い。

巨大ロボが大好きな僕みたいな奴は嫌いになる理由がありませんでした。

ということで、脊髄反射的にサマーインターンに申し込んだところ、とても倍率が高いらしく、多分落ちると思ったら、

先輩がすでに会社で活躍しているという事実もあってか、なんとか滑り込めました。

さて前置きはこれくらいにしておいて、実際のインターンシップで何があったか語っていきたいと思います。

インターンシップ概要

概要をさっくりまとめると、「不動産のデータを使って、不動産業者向けの便利ツールを考えて、作ってみよう」というものです

1日目

1日目はPythonとGitや要件定義とチケット駆動開発についての講習が入ります。

Gitの講習はなかなかに急ぎ足だったので、にわかな僕を始め、参加した学生の中でも中々に苦戦している人が多くいた印象があります。

その後講習を終え、帰りまで残り3時間で要件定義、作業分担、時間見積もり等を行え。というスーパータイトスケジュール。

要件定義の段階で話したチームの学生さんは、みんな超がつくほど有名大学であり、会話の脱線が基本的に少なく、とても考えやすかったです。

特に作業の見積もりや、分担の仕方が凄く早く決まったため、皆さんこういうハッカソンのようになれている方たちなのかなぁと勝手に思ってました。

しかし、ここで反省点なんですけど、使用する技術やデータを中心として作業を考えてしまい、肝心の「業者の要件から、こういう機能を作った」というストーリーの部分を考えるのがとても甘かったような気がします。

最終的に、「地域ごとに、横軸を家賃として縦軸をその他要素(間取り、駅への近さ)としたグラフとして可視化し、

クラスタリング(データをある程度分ける)を行い、

最終的にクラスタごとのセールスポイントをWordCloud(よく登場する単語とかを何となく可視化するアレ)にかける

という極めて具体的な機能まで整いました。

分担では、「CSVからデータを下処理」「グラフをプロット」「クラスタリング」「WordCloud」と4人でスパっと分割しました。

ちなみに言語はpythonです

2日目

自分の役割はクラスタリングであり、下処理されたデータを受け取った上で、最初に外れ値検出を目的とするアルゴリズムを調査しました。

色々調査しましたが、チームメンバーが教えてくれた「LOF」というアルゴリズムを実装しました。(ライブラリを使用したため、一瞬で出来た)

また実際データがあまりにも巨大すぎるのにも関わらず、計算サーバにアクセスせず手元のパソコンで処理する環境であったため、

テストデータをランダムに作成するプログラムも作成しました。

3日目

昨日は調査に躓き、馬鹿を見たので調査時間をタイトめに取りました。

その結果、k-means++という超有名な手法を使いました(ライブラリを使用したため、以下略)

1日目、開発環境を統一させるためにpipenvというものを使う予定でしたが、何か色々あって上手くいかなかったので、各々ローカルの環境にインストールしたものを連絡し合うという運用で開発を行っていました。

そのせいで、自分が作ったipynbファイル(JupyterNoteBookというデータ解析で有名なツールで作成されたファイル)がみんな使えない状況になりました。

普段研究室ではDockerという環境の元、python開発用コンテナをDokcerイメージで共有しているため、あまり感じなかったんですが、

開発環境の共有って重要だと思いました(小並感)

さて、2次元グラフで可視化したいけど、説明変数をそこそこに増やしたいということで、次元削減の方法とかも調べましたが

明日の午後くらいからは、発表やテストのことも考えて欲しいと言われたので、とにかく時間がありませんでした。

持ち帰って、めっちゃ調査しようと思いましたが、最初にメンターに「出来るだけ持ち帰らず、業務時間内で考えて欲しい。時間管理もインターンのテーマの一つ」と釘を刺されたため(スーパーホワイト企業)

宿泊先の友達と飲酒して、すぐ寝ました。

4日目

朝来て、昼までに主成分分析の実装までのめどを立てるスケジュールで調査しました。

しかしGoogle検索検定789212級の自分では、思うように調査が進まず、さらにいえば、「横軸を固定として、縦軸をその他の値で次元削減」という行為を行っている人がどうしても発見できなかったんですね(多分、値間の整合性とかが全然担保されない)

研究室だったら、このままだらだらTry&エラーにしゃれ込みたいところですが、今回はそうはいかない。

自分の作る機能が吐き出す変数の形が変わることで、次工程の可視化ツールも変更箇所が出てくるという状況です。

悔しいですが、機能追加を見送ることにしました。

5日目

いよいよ最終日です。

ほぼ開発でやることが無くなったため、スライドの作成と、メンバーの一人が作ったテスト項目を消化していました。(バグが数か所見つかった)

まぁバグ修正もやりたかったんですが、あまり時間がないため、なくなく発表スライドを急ピッチで作り、発表しました。

発表模様の写真

↑3枚目に自分がいます。えぐめの猫背がクソだせえ。

自分たちの提案するシステムは、土地ごとに、物件の家賃を横軸とし、縦軸をその他値としたグラフを可視化することで、

自分の持つ物件が、他会社の物件と比べどのような立ち位置に存在するか分析することを目的としたツール。

また、その物件のクラスタリングを行い、セールスポイントをWordCloudにかけることで、クラスタごとの特徴を見ることが出来ます。

実際の発表では、機能の存在だけをぐぁーっと説明しただけなので、もう少し価値提案を上手にしたら、伝わっていたことが反省点ですね。

さて、

1.  何をするにしても、制限時間を設けるべき

今回はチケット駆動開発を行い、作業時間を見積もる必要がありました。

そのおかげで、全体的にハリのある開発が出来たと思います。

研究や自分での趣味の開発に関しては、あまり時間制限がなく、終わるまでやることを許されますが、

しかし働くとなると、そういかねぇもんであるため、

人間、何かしら時間に追われている方が圧倒的に手を動かせるもんだと、改めて実感しました。(ていうか今回の記事も時間決めなかったら凄く公開が遅れた。(猛省))

2. 関数は使うだけのもの。という考え方

今回、他人のコードをたくさん読む時間がありましたが、やはり理解できない場所が多いわけです。

ゆえによく可読性という言葉が、チームメンバーの中でものすごく出てきました。

しかしメンターの方が、「使い方さえわかれば、使用上問題ないのでは?」と言っていました。

確かに長いこと保守するシステムを作成する場合、読みやすいコードは必須なような気がしますが、

このように短期間である程度動かせるものを作成するためには、可読性より引数や戻り値などを補足し、使用すること中心で、連絡を最小限に抑えることさえできれば、

もう少しシステムの中身自体を考えることができたかもしれません(~IfStory~)

3.  やっぱフレームワークは偉大かもしれない

現在、行っているとある会社の長期インターンでWebフレームワークの「Ruby On Rails」を使っています。

開発の中で静的解析などをクリアしてやっとプルリクエストを送れる環境を始めて体験して、

多少の(異常な)息苦しさと、初めてやるフレームワークの仕様などに苦しめられながら戦っていますが、

やっぱり、ある程度、置き場所とかクラス名とか行数とかでも、そういう些細な部分でも一元化されるというのは、

多少なりとも過ごしやすい

自分はまだ理解が浅いので、本当の恩恵はわかりませんが、

リポジトリの中にあるコードの内容を真似て開発を行わなければいけないときかは、やはり置く場所とかが何となくわかるし、

同様に、僕の汚物のようなコードでもすぐにレビューが返ってくるので、

何か決まり事がある。

という息苦しさは必要な息苦しさなのではないかと思いましたね。

ということでめちゃくちゃ遅くなりましたが、「いい生活」さんのサマーインターンの感想いかがでしたでしょうか。

内容も面白い上に、昼ご飯もおいしく、ウォーターサーバーの水もおいしい。

とても楽しい一週間でした。

ビッグデータを活用する系ですので、機械学習関連の研究分野の学生もゴロゴロいて、

自分の知らないインテリ人間たちと巡り合える機会ですので、

ぜひ来年皆さん応募してみてはいかかでそうか?