ためすう

How to Win a Data Science Competition (Week2-1 part3)

2019-05-25

Exploratory Data Analysis

学習目標

  • Describe the major visualization tools
  • Generate hypotheses about data
  • Inspect the data and find golden features
  • Examine and analyze various plots and other data visualizations

Exploring anonymized data

明らかにしたくない情報などを内容が分からないようにしていることがある。

データはデコード、匿名化解除することができる場合がある。

  • 個別の特徴を探索する

    • カラムの意味を推測する
    • カラムの種類を推測する
  • 特徴の関連を探索する

    • ペアの関連を見つける
    • 特徴のグループを見つける

役に立つ関数 (Pandas)

-- データの型を予測
df.dtypes

df.info()

-- 値ごとのカウント
x.value_counts()

-- nullかどうかをチェック
x.isnull()

参考

How to Win a Data Science Competition (Week2-1 part2)

2019-05-25

Exploratory Data Analysis

学習目標

  • Describe the major visualization tools
  • Generate hypotheses about data
  • Inspect the data and find golden features
  • Examine and analyze various plots and other data visualizations

Building intuition about the data

  • ドメイン知識の取得
    • 深く問題を理解するのに役立つ
  • データが直感的に分かるかどうか
    • データがドメイン知識と一致するかどうか
  • データがどのように作られたかを理解する
    • 適切なバリデーションを設定することは大切

何を予測するのか、持っているデータは何か、問題に対してどのようにアプローチするかを理解すること

データのカラムの意味を理解する

訓練データ、テストデータに偏りがあると、モデルの適切な評価ができないので注意する

参考

How to Win a Data Science Competition (Week2-1 part1)

2019-05-25

Exploratory Data Analysis

学習目標

  • Describe the major visualization tools
  • Generate hypotheses about data
  • Inspect the data and find golden features
  • Examine and analyze various plots and other data visualizations

Exploratory data analysis

EDA って何?

データを分析すること。

EDAで必要なこと

  • データをよく理解すること
  • データについての直感を構築する
  • 仮説を立てる
  • 洞察する

コンペで提供されるデータは、匿名化、暗号化、前処理、難読化されていることがある

リーク

コンペの主催者がデータ準備中の誤り。

まとめ

コンペを始めるときは、モデルを構築する前にEDAからやった方が良い。

参考

アジャイルソフトウェア開発の奥義 第2章 エクストリームプログラミングの概要

2019-05-23

「アジャイルソフトウェア開発の奥義」の読書メモです。

時々、個人の見解入りです。

エクストリームプログラミング (XP) とは

シンプルかつ具体的なプラクティスの集合から構築されているアジャイル開発プロセスである。

実践

実践法について書かれていました。

全部を満たす必要はない(できない)と思ったのと、状況に応じてカスタマイズしていった方が良いと思います。

チームメンバーとしての顧客

XPチームにとっての顧客とは、仕様の定義とその優先順位の決定権を持つ個人またはグループである。

物理的な距離も近い方が理想とのことです。

確認がすぐ出来るので、同意。

ユーザーストーリー

機能として入れるかどうかを検討できるため、同意。

短期間のリリースサイクル

おそらくここでいうリリースは、プロジェクトの成果物としてという意味だと思います。

運用されているサービスにリリースするということではないと思います。

受け入れテスト

本では顧客が提示とあるが、現実的にはエンジニアが顧客と共通認識を持つことになるのかなと思います。

ペアプログラミング

相談しながらやるという意味で同意。

ただ数時間もやる必要性は感じません。

テストファーストの開発

理想だと思いますが、実現できている組織はどれくらいあるのか気になります。

個人的にはユニットテストは、設計のセルフチェックの比重が大きいと思います。

(組織の状況によって変わると思います)

共同所有権

情報を共有するという意味で、同意。

継続的なインテグレーション(統合)

組織がどんなアーキテクチャを使っているかによりそうです。

ちなみには本ではビルド必要そうな言語想定かもしれません。

持続可能なペース

同意。

オープンワークスペース

他のペアの会話も聞こえる程度の環境の方が、作業効率が2倍になる研究もあるようです。

計画ゲーム

特に書くことなし。

シンプルな設計

不具合を発生させる可能性を低くするなら、構造をシンプルに保ち続けるという意味で同意。

  • 何とか動くだけの最もシンプルなものを考えよう。
  • あとで必要になんてならないよ。
  • 同じことは2度しない。

冗長性をなくす最善の方法は、アブストラクション(抽象化)を使うことである。

リファクタリング

コードはすぐに劣化していく。

コードを書いた当時と状況が変わるためだと思います。

リファクタリングは常に考える必要がありますが、作業ボリュームとの相談が必要です。

メタファー

概念の定義(言葉の定義)が大切。

同じ言葉で共通認識を持っていれば、その言葉だけで伝わるので必要と思います。

アジャイルソフトウェア開発の奥義 第1章 アジャイルプラクティス

2019-05-23

「アジャイルソフトウェア開発の奥義」の読書メモです。

時々、個人の見解入りです。

アジャイルアライアンス宣言

プロセスやツールよりも、人と人同士の交流を重視する。

開発環境を整えるよりも、開発チームを形成することの方がずっと重要である

同意。開発チームがあれば、開発環境も整えられていきそうです。

包括的なドキュメントよりも、動作するソフトウェアを重視する。

システム全体を見渡すことができるような資料は必要だと思います。

仕様書となると、システムの変更に合わせて保守していく必要があるので難しそうです。

システム改修する -> 関連する資料修正する の資料に関しては、なくても良いものかもしれません。

資料 -> システム改修 に属する資料であれば、必要なものと言えそうです。

契約上の交渉よりも、顧客との協調を重視する。

成功の鍵は、顧客との密接な協調関係を築いたことと、コストや納期をがちがちに決めるような契約書ではなく、相互の協調関係について取り決めた契約書を用意したことにある。

システムの開発であれば、契約前、つまりシステムの開発前に全てを決め切ることは出来ないと思うので、この方針にした方が円滑に進みそうだと思います。

計画に従うことよりも、変化に対応することを重視する。

変更があることは頭に入れておく必要があり、計画と変化を天秤にかけた時、変化の方を優先せよという意味だと捉えました。

変化を優先するとは、ある目的、ゴールに向かって、変化を受け入れることだと思います。

原則

アジャイルアライアンス宣言で掲げている4つの価値を実現するために、以下の12の原則が導き出されました。

最優先事項は顧客を満足させることであり、価値あるソフトウェアを早い段階から継続的に届けることでこれを実現する

物事の判断ポイントになるので、プロジェクトを進めていく上での土台になると思います。

要求変更を歓迎し、たとえ開発過程の後半であってもそれを受け入れる。アジャイルプロセスは、変化に対応をすることで顧客の競争上の優位性を確保する。

これはよく分からないです。

実働可能なソフトウェアの納品を頻繁に行う。できるだけ短い時間で納品することを旨とし、数週間から数ヶ月間隔で納品する。

同意。

顧客と開発者はプロジェクト全般を通じて日々ともに働かなければならない。

現実的に可能なのかわかりませんが、理想だとは思います。

自社サービスだったら、現実的だと思います。

やる気のある開発者をプロジェクトの中心に据え、彼らが必要とする環境とサポートを与え、信頼して仕事の完遂を任せる。

同意。

開発チームで情報を伝達する最も効果的な方法は、直接話し合うことである。

基本的には同意。関わっている人数が多いときは、チャットなどで話しに参加していない人も見られるようにしておく必要があると思います。

実動するソフトウェアこそが進捗状況の尺度である。

同意。

持続できるペースで開発する。そうすれば、スポンサーも開発者もユーザーもずっと一定のペースを確保できる。

同意。しかし、予測していないことは、どこかのタイミングで起こりがちなので、前倒しで進めておきたいという思いもあります。

高度な技術と優れた設計への配慮は、アジャイル性を高める。

開発スピードを保つ鍵は「品質である」

本の中では、あとで書き直すという考えは持たない方が良いという意味合いでした。

シンプルさが肝心 ー やらなくていいことはしない。

このやらないことを決めるというのは難しいのですが、リソースの制約がある以上、意識したいところです。

最高のアーキテクチャ、仕様要求、設計は自己管理能力のあるチームから生まれる。

プロジェクトにコミットするという意味だと捉えました。

(どんな仕事にも言えそうですが)

チームは定期的にプロジェクトを見直し、より効果的な方法を考え、対応方法の変更や調整を行う。

改善策を考え続けろという意味だと捉えました。

How to Win a Data Science Competition (Week1-6 part2)

2019-05-22

Feature extraction from text and images

学習目標

  • Explain how employed model impacts choice of preprocessing
  • Summarize feature preprocessings for numeric and categorical features
  • Summarize feature generation approaches for datetime and coordinates
  • Summarize approaches to deal with missing values
  • Outline the pipeline of applying Bag of Words
  • Compare Bag of Words and Word2vec
  • Explain how to extract CNN descriptors from images

Word2vec, CNN

Word2vec

Words

  • Word2vec
  • Glove
  • FastText

Sentences

  • Doc2vec

Bag of words と Word2vec の比較

  • Bag of words

    • ベクトルがかなり大きくなる
    • ベクトルのそれぞれの意味が分かっている
  • Word2vec

    • ベクトルが比較的小さい
    • 意味が解釈される時、不利になることがある
    • 似ている単語はベクトル表現も似ている

画像

  • 畳み込みニューラルネットワークは、画像の圧縮表現を可能にする

以下、画像の分類タスクの内容は今回省きます。

(TODO: 学んだら追記する)

How to Win a Data Science Competition (Week1-6 part1)

2019-05-22

Feature extraction from text and images

学習目標

  • Explain how employed model impacts choice of preprocessing
  • Summarize feature preprocessings for numeric and categorical features
  • Summarize feature generation approaches for datetime and coordinates
  • Summarize approaches to deal with missing values
  • Outline the pipeline of applying Bag of Words
  • Compare Bag of Words and Word2vec
  • Explain how to extract CNN descriptors from images

Bag of words

テキストから特徴を抽出する

主に2つの方法がある

  • bag of words を適用する
  • 単語をベクトルにするようなアンサンブルを使う

bag of words

  • 単語ごとに出現数を数える
  • sklearn では CountVectorizer で出来る

後処理

  • サンプルを比較可能にする(特徴のスケーリングに依存しているモデルに対して有効) 単語の出現頻度で正規化する。(全体数で割る)

  • 重要な機能を強化して、不要なものを減らす 特徴を文書数の逆数で正規化する (idf) => 頻度が高い単語に対応する特徴は、頻度が低い単語に対応する特徴より、縮小される

  • sklearn では、TfidVectorizer が使われる

Ngram

  • 単語に対応する列だけでなく、異なる単語に対応する列も追加する
  • 単語ではなく、文字で特徴を持たせた方が手軽なことがある
  • 文字の Ngram はあまり目にしない単語の場合に役立つ
  • sklearn の CountVectorizer は、Ngaram を使うのに適切な Ngram_range というパラメータがある
  • 単語のNgramから、文字のNgramに変更するのに、analyzer というパラメータが使える

前処理

  • Lowercase (小文字化)
  • Lemmatization (語彙化)
  • Stemming (ステミング)
    • 単語の末尾を切り捨て、単語を生成する
  • Stopwords
    • 重要な情報を含まない単語を省く
    • sklearnのCountVectorizerには、max_df というパラメータもある

まとめ

  • 前処理
  • Ngram で分割
  • 後処理 (TF-iDFを使って正規化)

参考

How to Win a Data Science Competition (Week1-5 part4)

2019-05-21

はじめに

Coursera の 「How to Win a Data Science Competition」 のメモです。

英語字幕しかなかったので、翻訳の意味が分からないところがあるかもしれません。

Feature Preprocessing and Generation with Respect to Models

学習目標

  • Explain how employed model impacts choice of preprocessing
  • Summarize feature preprocessings for numeric and categorical features
  • Summarize feature generation approaches for datetime and coordinates
  • Summarize approaches to deal with missing values
  • Outline the pipeline of applying Bag of Words
  • Compare Bag of Words and Word2vec
  • Explain how to extract CNN descriptors from images

Handling missing values

欠損値

  • 欠損値を他の値に置き換える

    • -999, -1 など
    • 長所: 木モデルにカテゴリに分類する可能性を与える点
    • 短所: 線形モデル、ニューラルネットワークのパフォーマンスが低下する可能性
    • 平均、中央値
    • 長所: 線形モデル、ニューラルネットワークに有効
    • 短所: 木モデルは、オブジェクトを選択するのが難しい
    • 値の再構築
    • isnull という欠損値かどうかの特徴を作る
      • 平均、中央値を使いつつ、木モデルやニューラルネットワークに関わる問題を解決できる
      • データセットの列が2倍になるのが欠点
    • 時系列データは構築できる可能性がある
  • 欠損値の近くでは、欠損値を置き換えた値との差分が大きくなることがある

  • 外れ値を欠損値として扱うこともある

  • カテゴリ特徴で、テストデータには存在し、訓練データにはない場合、欠損値、カテゴリを変更すると有効なことがある

    • 訓練データに含まれていないカテゴリは、最終的にランダムに扱われる

まとめ

  • データが存在しない NaN を選択するかどうかは、状況による
  • 欠損値を再構築できることもあるが、通常は、欠損値を -999、平均値、中央値に置き換える方が簡単
  • 欠損値はコンペの主催者によって、置き換えられていることがある
  • 欠損値を表す isnull は役に立つことがある
  • 一般的に、特徴の生成前には欠損値を埋めることは避ける
  • Xgboost は欠損値を扱うことができる

参考

How to Win a Data Science Competition (Week1-5 part3)

2019-05-21

はじめに

Coursera の 「How to Win a Data Science Competition」 のメモです。

英語字幕しかなかったので、翻訳の意味が分からないところがあるかもしれません。

Feature Preprocessing and Generation with Respect to Models

学習目標

  • Explain how employed model impacts choice of preprocessing
  • Summarize feature preprocessings for numeric and categorical features
  • Summarize feature generation approaches for datetime and coordinates
  • Summarize approaches to deal with missing values
  • Outline the pipeline of applying Bag of Words
  • Compare Bag of Words and Word2vec
  • Explain how to extract CNN descriptors from images

Datetime and coordinates

  • 数値特徴、カテゴリ特徴とは大きく異なる

Datetime

  • Datetime から生成されるほとんどの特徴は2つに分類できる
    • 期間内のある瞬間
    • データ内の繰り返しパータンを捉えるのに役立つ
    • 1週間の何日目、 季節、 年、月、日、時、分、秒
    • 特定のイベントからの経過時間
    • 行に依存しないもの (unix time)
    • 行に依存するもの (直近の休みから、次の休みまでどのくらい期間があるか)
    • 特徴間の差分

coordinates (座標)

下記を特徴として使う

  • 地図上の重要な点までの距離を計算する
  • クラスターの中央の点
  • 座標の周辺の集約統計を計算する
    • 面積
    • 極性 (polarity)

tips

  • decision trees をトレーニングする時、座標を回転させた特徴を作る
    • 回転させる角度のおすすめ (45度、22.5度)

参考

Rails5 で日本語の曜日を表示する

2019-05-20

やったこと

Rails5 で日時データから日本語の曜日を表示します。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

$ rails c
Running via Spring preloader in process 62147
Loading development environment (Rails 5.2.3)
irb(main):001:0> Time.now
=> 2019-05-20 18:51:58 +0900
irb(main):002:0> %w(日 月 火 水 木 金 土)[Time.now.wday]
=> "月"
irb(main):003:0> Time.now.wday
=> 1

wday の返却値と曜日の配列を紐づけます。

参考