セーターの備忘録

大学編入やIT関連の内容を記していく予定です

初めてKaggleに挑戦した話1

KaggleのTitanicコンペに取り組んだので忘れないうちに書いておきます。

 

始めた理由

元々取り組みたいと思っていましたが、一番のきっかけは先日参加したFJCTのデータサイエンスインターンです。参加した学生や企業の方もKaggleに取り組んでいる方が多く、インターン中もメンターの方から「この辺りはKaggleをやってると大切さを実感できるよ」というような話を伺ったりもしたので、インターンが終わった日の夜からモチベーションが高いうちに始めました。

ちなみに、タイトルで初めてと書いていますが、実際は少し前に一度挑戦したことがあります。以前からkaggler-jaのSlackに入っており、その中でビギナー向けに行っていたKaggler-ja In-class Competition1に取り組みました。ただ、このときはあまり取り組む余裕がなかったこともあり、一つの手法を試してみる程度でした。

 

取り組んだコンペとやったこと

コンペはチュートリアルとして有名なTitanicに取り組みました。

やったこととしては、

  • データの可視化と欠損値処理、カテゴリ変数の処理
  • Random ForestでAccuracyを出す
  • Light GBMでAccuracyを出す
  • Feature importanceの確認
  • SFSで特徴選択して再学習

辺りをやってみました。

 

データの可視化と欠損値処理

データの可視化

まず各データの上位5件の中身を確認した後、データを可視化して欠損を見てみました。

f:id:resweater:20180914050936p:plain

f:id:resweater:20180914051010p:plain

見たところCabinは欠損値が多すぎて有効なデータとして扱えそうにないので消しました。また、Name、Ticketもあまり関係なさそうなので削除しました(PassengerIDも消すつもりでしたが、1回RandomForestで結果を出してからPassengerIDを消し忘れたことに気付きました汗)。

欠損値処理

詳しく見てみると、いくつか欠損値が見られたのでその処理を行いました。欠損値が2つしかなかったEmbarkedでは最頻値を、それ以外では平均値を入れましたが、Ageは20%近い欠損があったのでもう少し考慮する必要があるのかもしれないです。

カテゴリ変数の処理

数値化されていないSex及びEmbarkedは数値化する必要があるので、scikit-learnのLabel Encoderで数値化しました。

 

Random ForestでAccuracyを出す

とりあえずRandom ForestでAccuracyを出してみました。この時はだいぶ手探りでやっていたので、特徴量はPassengerID、Pclass、Sex、SibSp、Parch、Fareで行いました。testデータの結果は0.74641となり、これをベースに取り組んでいきました。

 

LightGBMでAccuracyを出す

次に、先日のインターンでも多用したLightGBMで学習させてAccuracyを出してみました。Feature importanceで寄与度を確認して用いる特徴量を確認しながら3つほど試してみました。結果としては、

  • PassengerID、Pclass、Sex、SibSp、Parch、Fare(Random Forestと同じ)
    → 0.73684
  • Pclass、Sex、SibSp、Parch、Fare、Age
    → 0.76076
  • Pclass、Sex、SibSp、Parch、Fare、Age、Embarked
    → 0.76076

のような形になりました。

 

SFSで特徴選択してみる

最近大学の講義でSFSでの特徴選択のプログラムを作成していたので、使ってみました。ここでは、KNNで学習を行い、trainデータを分割して検証しました。

f:id:resweater:20180914054522p:plain

結果としては特徴量はPclass、Sex、Parch、Embarkedの4つのとき最適という結果になりました。ただ、精度があまり高くなかったこと、Survivedに対する特徴量ごとの相関係数を求めた結果やFeature importanceを可視化して見たときの特徴量と選択された特徴量が一致しなかったことがイマイチ理解できなかったのでその辺りをもう少し勉強したいと思います……

 

まとめ

初めてしっかりKaggleに取り組み、課題も多く残りましたが、どのように取り組んでいけばいいのかなんとなく理解することができました。なにより、今まで取り組みたくても欠損値の扱いなどが手探りすぎてなかなか出来ていませんでしたが、インターンシップを通して学んだことを生かすことでスムーズにコードを書くことができたので、データ分析そのものを楽しく取り組めました。

また、やっていく中でなぜ特徴量エンジニアリングが必要なのかも分かってきたので、次はその辺りもやっていければいいかなと思います。

富士通クラウドテクノロジーズのデータサイエンスインターンに参加してきました

富士通クラウドテクノロジーズ株式会社 (FJCT、旧社名:ニフティ) のサマーインターンシップの3daysデータサイエンスコースに参加してきました。ブログなどに載せて構わないとのことだったので、適当にオブラートに包みつつ備忘録としてまとめようと思います。

 

参加した動機

 参加した主な動機として、

  • 専攻分野での経験を積みたい
  • データサイエンティストの働き方、仕事内容を知りたい

の二つがあります。

自分は機械系学部からの編入生のため、他の情報系の学生と比べてまだプログラミングなどの経験が少ないという課題があります。また、現在は機械学習を用いた研究を行っており、データサイエンティストという職種に関心を持っています。そこで、実際にデータサイエンティストとしての仕事を実践的に学べると書かれていたFJCTのインターンシップに応募しました。

データサイエンスや機械学習に関するインターンシップは多くの企業が募集していましたが、どこも倍率が高く、何社か落ちてしまったりしてなかなか決まらなかったので、選考通過の連絡を頂いたときはホッとしました(汗)

 

インターンシップ参加まで

実際にインターンシップが始まるまでに、Slackで参加者同士簡単な自己紹介を行いました(周りの学歴の高さに怯えたりしてたのは内緒)。この夏は他にも何社かインターンシップに参加しましたが、その多くで事前にSlackを用いて自己紹介をしたりしていたので、当日インターンシップへ向かう時の緊張感が和らいで良かったです。

 

インターンシップ参加期間中の話

3日間の流れとしては、主に初日にハンズオン形式でデータサイエンスについて学び、2, 3日目でチームごと課題をこなして3日目の最後にプレゼンを行うという形でした。

2日目の午後、台風の影響で2時間ほど短縮されるというトラブルがありましたが、それ以外は問題なく終えることができました(この夏インターンに参加した中で毎回台風が当たってて悲しい…)。

インターンシップの課題

このインターンシップでは、チームごとあるデータが与えられました。そのデータをクライアントから渡されたデータと仮定して利用し、カテゴリ予測を行い、予測結果を説明した上で本格的な予測プロジェクトの受注を目指すというものでした。

与えられたデータはカラム数が多く、また欠損値も多く見られ、データリークの問題も生じたため扱いが非常に難しかったです。

 学んだこと

ハンズオンの説明の中では、データを受け取ってから確認すべきことを始めとして、クライアントへ予測結果を伝えたり追加で確認をしたりしなければいけないことまで一通りの説明を受けました。

f:id:resweater:20180910055829j:plain

参加する前は技術に関する話がメインになるのかなと思っていましたが、そんなことはなく、メンターの方は「機械学習をいかに可視化して、分かりやすく説明するか」という点を非常に強調されていました。

チームとしてまとめたもの

f:id:resweater:20180910060550j:plain

自分のチームでは、最終プレゼンにおいてペルソナを設定した提案を行うことでより具体的なビジネスモデルを意識したプレゼンを行いました。メンターの方からの評価や自分たちの反省として、提案の話が大きくなりすぎて予測結果を上手く使えていないという課題が残りました。

 

インターンシップを振り返って

目標の達成

最初に示した専攻分野の経験を積むということとデータサイエンティストの仕事について知るという目標は、十分すぎるほど達成することができました。

インターンシップの内容は段々とペースが速くなり、付いていくのでギリギリな面もありましたが、付いていけないということもなく適度に苦しみながら取り組めてとても充実していました。特に、これまで扱う機会の少なかった欠損値処理について、欠損の仕方に応じた対処方法をじっくり取り組めたことは非常に勉強になりました。

また、初日と3日目の夜に懇親会があった上、インターン中もメンターの方が会話の中で業務での例や話も含めて話してくださり、FJCTでデータサイエンティストという仕事をしている方がどのような働き方をしているのかについて詳しく知ることができました。

f:id:resweater:20180910061526j:plain

 

インターンシップで持った印象

参加する前はFJCTは富士通グループの一社というイメージを持っていました。しかし、実際に行ってみるとイメージとは大きく異なり、非常に自由な働き方をしている印象を受けました。

また、仕事が好きで自ら積極的に取り組んでいる方が多く、モチベーションの高い人が多いなという印象を受けました。

 

まとめ

たった3日間でしたが、技術面でも今後の就活を考える上でも多くのことを吸収でき、非常に充実したインターンシップでした。また、今回ほど「自分がイメージした通りのプログラムを作成できない悔しさ」を感じたことはなく、自身の課題も発見することができました。とりあえず今まで以上にKaggleなどにも積極的に取り組んでいきたいと思います。というかその場のノリで(?)既に取り組み始めました。

就活を始めるまでに、より実力をつけていければと思います。

FJCTの皆様、ならびに一緒に参加した学生の皆様、ありがとうございました。

勉強がてら自分のホームページを作成してみた

ということで、自分のホームページ(ポートフォリオ)を作成して公開したのでメモしておきます。

 

(2019/06/05)github.io に作り直しました。

ホームページ:Sweater's Portfolio

 

制作理由

先日、ハッカソンに参加してチーム開発を行いました。その際、機械学習をシステムへ実装していく中でフロントエンドやバックエンドへの知識があまりなかったため、非常に苦労しました。

また、manifes2018に参加した際、エンジニアの方から自分のホームページを作ると凝れば凝るほどフロントエンドからバックエンドまで様々な知識を得られるとアドバイスを頂き、制作してみることにしました。

 

フロントエンド

今回はHTML/CSSのみで作っています。公開されているポートフォリオをいくつか参考にしながら制作しました。また、今後JavaScriptも使う予定です。

一方で、先日のハッカソンではフロントエンドを担当していた人がReactを利用していたのでその辺りも後々調べてみたい……

 

バックエンド

バックエンドを少しでも触るのは今回が初めてだったので苦労しました。

今回はAWSのS3 (Simplr Storage Service) を使い、この辺りのページを参考にしました。

ferret-plus.com

AWSを使うと無料アカウントでもドメインの取得とサーバーの利用がまとめて可能なため、今回はAWSを利用しました。

 

まとめ

自分のホームページを作りながら、初めてバックエンドを触りました。ひとまずホームページ自体は公開しましたが、まだ作成中のページもあるので継続して取り組んでいきたいです。

また、今回は記事を参考にしながらバックエンドを作成しましたが、あまり理解が深まっていないのでもう少し勉強していこうと思います……

manifes2018に参加してきました

manifes2018というイベントに参加してきたのでまとめます。

togetter.com

 

manifesとは

connpass.com

manifesは全国から学生やエンジニアの方が集まって行うLT会で、ローカルイノベーションさんが主催して行っています。

会場は六本木でしたが、ちょうど前日までインターンシップで東京に来ていたため、併せて観覧枠で参加してきました。

ちなみに、同日品川ではKotlin Fest 2018が行われていたようです(来年は参加してみたい)。

 

当日のLT

当日は

前年王者LT→学生LT→企業紹介→企業LT→投票&結果発表→懇親会

という流れでした。

 

学生LT

特に印象に残った学生LTとしては、学祭の業務改善として自分のサークルの模擬店をキャッシュレス化したという話がとても興味深かったです。

 自分は以前バイトや学内の委員会でデジタル化による業務改善に取り組んだことがあったので、そういったこともこのLTのような形でまとめられるのかもと考えたりしました(そのうち記事にしたい)。

 

また、PC-98を用いて低レイヤーを勉強しているというLTでは、質疑応答の際に出てきた「それは何のためになるのか」という質問に対して登壇者が「ロマンがある」と回答し、非常に盛り上がりました。

ロマン……大切にしたい……

 

企業LT

企業LTでは移植駆動学習に関するLTが非常に興味深かったです。

移植駆動学習は、既に存在するプログラムを他言語で書き直した上でカバレッジ100%のプログラム作成を目指すというものです。カバレッジ100%はテストケースの全分岐を理解し、エッジケースをしっかり考えなければ達成出来ないため、非常に良い学習法でやってみたいと思いました。

 

まとめ

登壇されていた方々のLTのマニアック度が非常に高く、なかなか理解することが難しい内容も多かったですが、そのようなことも出来るんだという発見が多く非常に興味深かったです。

また、懇親会では自分が関心を持っている分野で活躍されているエンジニアの方ともお話したりアドバイスをいただいたりすることができ、参考になりました。

スタッフや登壇者の皆様、ならびに企業の皆様、ありがとうございました。

 

P.S.

理系の大学編入について2 ー使用したツール・参考書ー

(2018.8.28更新)

この記事では大学編入試験に向けて利用したツールや参考書についてまとめています。

 

編入に関する情報を集めた方法

大学編入試験は他の入試と違い、情報が非常に少ないという問題があります。

そこで、情報を集める手段の一つとしてTwitterを使いました。

Twitterには編入試験経験者がアドバイスをしているアカウントなども多くあるので、積極的に話を聞いてみたりすることで編入編入試験に関する情報を集めました。

また、Twitter上には同じように不安を抱えながら編入試験に挑戦しようとしている人も多くいるので、そのような人たちとやり取りをしながら励まし合うことでモチベーションの維持に繋げることが出来ました。

 

  • 中ゼミ(予備校)

大学編入に関する情報を集めたり面接練習をするため、予備校を利用しました。

ただ、費用がかかるほか、住んでいる地域には予備校がなかったため、主に編入試験に関する情報を貰うことと入試前に面接練習を行ってもらうために利用しました。

 

参考書

まず、大学編入試験では受験する大学の編入試験の過去問が最も参考になります

多くの大学では編入試験の過去問を配布しているので、まず志望大学の過去問を取り寄せて出題の傾向や演習に活用すると良いです。

 

次に、自分が編入試験勉強で利用した参考書を記します。

自分が受験したいくつかの大学では、試験科目に数学、線形代数、英語(長文)、プログラミング・アルゴリズムがありました。

また、受験した大学は数学の比重が大きかったため、数学をメインに取り組みました。

 

数学・線形代数

  • 編入数学徹底研究ー頻出問題と過去問題の演習ー
編入数学徹底研究―頻出問題と過去問題の演習

編入数学徹底研究―頻出問題と過去問題の演習

 

 最もやり込んだ参考書。

地方国公立大学程度であればこの内容が理解出来ればいい (と勝手に思っています)。

自分はこの参考書の例題を中心に6周ほど解き、問題を覚えるまでやり込むようにしました。

 

  • 大学編入試験問題 数学/徹底演習
大学編入試験問題 数学/徹底演習(第3版)-微分積分/線形代数/応用数学/確率-

大学編入試験問題 数学/徹底演習(第3版)-微分積分/線形代数/応用数学/確率-

 

 編入試験受験生にはかなり人気が高い (らしい) 本。

上記の徹底研究より難易度は高く、入試まで余裕があったり、受ける大学の数学科目のレベルが高いようであれば取り組むといいと思います。

こちらも例題を中心に、1、2周しました。

この参考書は旧帝大など難関大の問題も多いため、解けたときの達成感がありモチベーションアップに繋がりました。

 

  • スバラシク実力がつくと評判の微分積分キャンパス・ゼミ

 解説が非常に丁寧な参考書。

上記2つの演習に取り組む際、分からない問題があった時に参考に用いました。

 

微分積分1 (高専テキストシリーズ)

微分積分1 (高専テキストシリーズ)

 

 高専のテキストは高校~大学1, 2年程度までの数学の内容となるため、非常に参考になりました。

こちらも分からない問題があった時の参考に用いました。

 

  • 大学の講義用教科書

自分が編入前に在籍していた大学には数学や線形代数の講義があり、教員が講義向けに製作しているテキストがあったため、参考に用いました。

現在在籍している大学などで数学や線形代数の講義がある場合、そこで用いる講義資料も参考になると思います。

 

英語

  • やっておきたい英語長文300
やっておきたい英語長文300 (河合塾SERIES)

やっておきたい英語長文300 (河合塾SERIES)

 

 自分が受験した大学の英語は情報系の専門英語長文がメインだったため、この参考書の中から科学技術の内容の長文を中心に取り組みました。

この参考書は長文の長さごとにいくつかシリーズが出ているので、自分の英語力に合わせた長文対策が出来るという点でもオススメです。

 

  • Next Stage
Next Stage 英文法・語法問題 3rd edition

Next Stage 英文法・語法問題 3rd edition

  • 作者: 瓜生豊,篠田重晃
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2011/11/09
  • メディア: 単行本(ソフトカバー)
  • 購入: 3人 クリック: 32回
  • この商品を含むブログを見る
 

  英文法の復習には高校で使っていたものを用いました。

 

プログラミング・アルゴリズム

  • やさしいC

 過去問を調べたところ、C言語を用いた問題が出題されていたため、C言語を独学するために用いました。

しかし、振り返ってみると本の内容は易しいため取り掛かりやすいが、その分入試レベルに達していませんでした。

 

C言語によるはじめてのアルゴリズム入門 改訂第3版

C言語によるはじめてのアルゴリズム入門 改訂第3版

 

 アルゴリズムについて理解するため使用しましたが、試験まで時間が足りずあまり取り組めなかったです。

 

まとめ

自分が取り組んだ参考書を紹介しましたが、最終的には自分に合ったものを選ぶのが一番だと思います。

編入試験を受けるのであれば、まず志望大学の過去問を取り寄せるところから始めることをオススメします。

理系の大学編入について1 ー4年制大学から4年制大学への編入ー

(2018.8.28更新)

自分が某大学機械系学部から某大学情報系学部へ大学編入をしてから2年が経ちました。自分の経験を基にいくつかの記事に分けて記します。大学編入を考えている人の参考になれば幸いです。

なお、このブログで記す大学編入4年制大学から4年制大学の理系学部への3年次編入を考えている人へ向けたものであり、また、大学編入は大学や学部学科によって大きく異なるため、記していることが当てはまらない場合もあるので気をつけてください。

 

4年制大学から4年制大学への編入はオススメしない

編入を考えている人にとって受験理由はそれぞれあると思うので、この記事ではあえてデメリットを中心に記しています。もしこの記事を見ている人で編入を考えている人がいれば、どのようなデメリットやリスクがあるのか参考にしてもらえればと思います。

なぜオススメしないかというと、

  • 編入試験勉強に拘束される
  • 編入後の単位修得が大変(留年する可能性がある)
  • 学部・学科も変える場合、編入後2年間で専攻内容の理解を深めることは難しい

の3点が挙げられます。それぞれ、以下に詳しく記していきます。

 

編入試験勉強に拘束される

理系の場合、特に国公立の大学編入試験は6~7月に行われることが多いです。

そのため、順当に進級してきた人が3年次編入試験を受ける場合、大学2年生の初夏に試験を受けることになります。

この時期というのは、大学に入学して1年が経ち、生活にも慣れて専攻分野の勉強を進める人、アルバイトやサークルなど課外活動に精を出す人など、各々自分が取り組みたいことに対して最も自由に取り組める時期です。

そんな時期に一人黙々と編入試験の受験勉強に取り組むのは精神的にも辛いことが多く、周りに流されて途中で諦めて他の道を選ぶ人も多かったです。

 

編入後の単位習得が大変

大学編入では編入前の大学の単位を振り替え認定してもらえることが多いですが、認定される単位には上限が定められています。この上限は大学によって異なります。自分の場合は編入前の大学で90単位近く取っていましたが、認定されたのは65単位でした。

つまり、編入と同時に20単位以上失った形となりました。

そのため、編入後は多くの講義を受ける必要があり、講義やゼミ、課題などをこなすだけでも非常に大変です。

 

また、振り替え認定に含まれなかった科目に必修科目が多くあった場合、編入後に受ける講義の中で同じコマに必修科目が重なる可能性があります。

そのような事態が4年次に起きた場合、片方の必修科目が取れないため強制的に留年となることもあります。

 

学部・学科も変えた場合、編入後2年間で専攻分野の理解を深めることは難しい

学部や学科も変更した場合、本来4年間かけて学ぶ内容を2年間で学ぶことになるため、編入前からよほど編入先の分野について理解していたり勉強していたりしない限り、非常に苦労することになります。

特に理系の場合は卒業研究がありますが、上記したように編入生は必要単位数が多く時間がないため、同学の人達以上に集中して取り組まなければ卒業研究を完成させることすら困難になりかねません。

実際、自分は4年生の後学期にも必修科目が残っていたため、卒業研究と講義の単位取得を並行して行わなければならず、非常に苦労しました。

 

大学編入にはメリットもある

ここまで主なデメリットについて述べてきましたが、当然メリットも多くあります。

例えば、

  • 大学が変わるため、周囲の環境や人間関係も一新される
  • 学部・学科を変えることが出来る
  • 興味を持った他大学の研究室へ行くことができることもある

などが挙げられます。

ただし、大学編入では志望理由書の提出が求められたり面接が行われることが多いですが、この時までに編入先の大学で取り組みたい研究など明確な志望理由を用意しておかなければ編入試験の合格自体が難しくなります。

 

まとめ

この記事ではあえてデメリットを中心に記しましたが、そのくらい大学編入では編入後のリスクがあるということを理解していただければ幸いです。

次の記事では、自分が編入試験の勉強で用いたツールや参考書について述べたいと考えています。