[仕事終わりの趣味] ビッグデータ分析実技 (作業型1,2,3)
非専門家や入門者の方が、ビッグデータ分析実技試験を短期間で取得できるようガイドします! 理論は軽めに、実践は確実に。複雑な背景知識がなくても、過去問を中心に試験に必ず出るポイントだけを絞って集中的に学習します。
受講生 5,716名
難易度 入門
受講期間 12か月


お知らせ
91 件
作業型2の
0点処理に関して多くのお問い合わせをいただいたため、
内容を動画にまとめてみました。結論:(マイナス予測値の処理については分からないので)発表を待ってみましょう!!
一生懸命頑張ったけれど、どこか不安なあなたのための最終チェック
[共通]
help()、dir()、__all__ですべてを解決できるわけではありません。
いざ試験会場で初めて使うと思った以上に戸惑うので、事前に試験環境でテストしてみてください。座席のキーボード・マウス・コンピュータに異常があれば、テスト時間直後、試験開始前に座席の変更を依頼してください。途中で変えようとするとメンタルが揺らぎます。問題は序盤にすぐ解決してから進むのが良いです。
何度も提出可能ですが、一度提出すると「提出(제출)」と表示されます。「提出」と表示されていると、再提出しようとしてうっかり忘れてしまう可能性があるので注意してください。最後に提出されたもので採点されます。
[作業型1]
上部データタブ → 「基本表示」クリック後、
Ctrl + Fで探してでも確認してください。「目だけでも解いてみる」という気持ちで取り組めば大丈夫です。正解さえ合っていれば大丈夫です。過程のコードがどうであれ関係ありません。きれいなコードよりも正確な答えが優先です。
groupbyは確実に習得しておいてください。ピボットまではいかなくとも、グループ別の集計は目視で解くのは難しいです。これはコードで処理する必要があります。結果は四捨五入・小数点以下の桁数・整数変換の指示を必ず確認してください。
round()を忘れたり、桁数を間違えたりして、正解を目前で逃すケースが多いです。ソート問題は昇順・降順、同点時の処理をよく確認してください。
sort_values()のascendingオプション、reset_indexの有無まで確認しておくと良いでしょう。条件フィルタリングの際、
&、|と括弧を正確に。df[(条件1) & (条件2)]で括弧を忘れるとエラーになります。
条件をcond変数に入れる場合は括弧は不要です。日付データは
pd.to_datetime()で変換した後、.dt.year、.dt.month、.dt.dayofweekなどを使えるようにしておいてください。曜日・月別の集計問題がよく出題されます。よく使う関数は手に馴染ませておくこと:
value_counts()、nlargest()/nsmallest()、quantile()(IQR外れ値問題)、fillna()、drop_duplicates()、astype()。外れ値・欠損値の問題は、問題で提示された基準(IQR、標準偏差、特定の条件)にそのまま従ってください。自分が知っている方法で勝手に適用するのは禁止です。
[作業型2]
モデルを1つだけ使うのであれば、lightgbmで全学習して終わらせればいいです。
2〜3個以上使うのであれば、検証した後に比較してください。評価指標がよく分からなければ、自分が確実に知っている指標でだけでも比較すれば大丈夫です。
rf、lgb、xgbを中心に見てください。これら以外のモデルがより良い性能を出すケースは非常に稀です。
比較が終わったら、全データで再学習することもおすすめします。データによって異なるため性能向上を保証することはできませんが、11回のように不均衡が深刻な場合は、私なら全データで学習させます。
不均衡データだからといって、パラメータやハイパーパラメータをいじれば必ず性能が上がるわけではありません。むしろ、デフォルト値の時に最高の性能が出ることもあります。不安であれば、デフォルト設定 + 全データでの学習をおすすめします。
スケーリングに力を入れすぎないでください。rf、lgb、xgbはすべてツリー系モデルなので、スケーリングによる性能の変化はわずかです。
train/testのカラムを全く同じに揃えてください。エンコーディング・前処理はtrainとtestに同様に適用する必要があります。ワンホットエンコーディング後にカラム数が変わってしまうミスがよくあります。まだ過去問で出題されたことはありませんが、例題にはあるので、trainとtestを結合して処理する方法もできるようにしておく必要があります。
予測対象(target)を明確にしてください。確率を求めているのか(
predict_proba)、クラスを求めているのか(predict)、問題を正確に読んでください。roc_aucなら確率、f1・accuracyなら通常はクラスです。提出形式を問題の指示通りに正確に合わせましょう。ファイル名、カラム名、インデックスを含めるかどうか(
index=False)まで。行数が間違っていると0点になります。時間が足りない場合は、性能向上にこだわらず、まずはlightgbmで最後まで回して提出ファイルを完成させてください。完成が優先で、最適化はその次です。
[作業型3]
作業型3は「分析しなさい」といった記述型・自由分析の問題ではありません。問題で要求されている分析だけを正確に実施すればよいです。任意で分析を追加したり拡張したりする必要はありません。問われている値だけを求めて出力してください。等分散かどうかなど、問題で問われてもいない分析の実行はNGです。
C()の使用は分析の種類によって異なります。ここで混乱する方が本当に多いです。
分散分析(ANOVA):独立変数(カテゴリ型)のすべてに
C()を使用します。例:
ols('y ~ C(집단)', data=df)、二元配置ならols('y ~ C(A) + C(B) + C(A):C(B)', data=df)集団間の差異を見る分析であるため、独立変数をカテゴリ型として処理する必要があるからです。
回帰 / ロジスティック回帰:
C()をむやみに使わないでください。連続型(数値)変数はそのまま入れます。
「この変数は数字のように見えるが、カテゴリ型として処理せよ」という明示的な言及が問題にある場合のみ
C()を使います。勝手な判断は禁止!
summary()の読み方を必ず身につけておいてください。回帰・ロジスティック回帰において、係数(coef)、p-value、R-squared、オッズ比などを表からすぐに探して答えられる必要があります。諦めずにこれだけでも確認してから臨んでください。
仮説検定は有意水準(通常0.05)とp-valueの比較が核心です。p < 0.05なら帰無仮説を棄却。どれが帰無/対立仮説なのか問題で確認してください。
検定の種類を正確に選んでください。(単)一標本/対応のある(対)標本/独立標本t検定、カイ二乗(独立性・適合性)、相関分析、ANOVAなどを見て判断します。
小数点以下の桁数や四捨五入の指示は、作業型3でも同様に注意してください。
print()での出力も忘れないようにしましょう。
作業タイプごとに難しい問題が1〜2問出題されることがあります。その問題だけに執着して時間を使い果たさないでください。難しい問題は一旦置いておき、解ける他の問題から確実に検証して点数を稼ぎましょう。満点が目標ではありません。70点、合格が目標です!ここまで準備されたことだけでも、十分に合格圏内です。ファイト!!試験頑張ってきてください! 💪
皆さんの合格を応援しています。- 退勤後の寄り道 -
もしかして、すべての問題を解かれましたか?
それなら、作業型2番(3番目の問題)で日付データの派生変数生成にも挑戦してみてください!まだそこまで進んでいないのであれば、新しい内容に手を広げるよりも、これまでに学んだ内容を一つずつ整理することをお勧めします。

日付派生変数 (曜日/月/週末) — train, test 両方同じように! train['date'] = pd.to_datetime(train['date']) train['dayofweek'] = train['date'].dt.dayofweek # 曜日(月=0~日=6) train['month'] = train['date'].dt.month # 月(1~12) train['is_weekend'] = (train['date'].dt.dayofweek >= 5).astype(int) test['date'] = pd.to_datetime(test['date']) test['dayofweek'] = test['date'].dt.dayofweek test['month'] = test['date'].dt.month test['is_weekend'] = (test['date'].dt.dayofweek >= 5).astype(int)頑張ってください!
今回のデータで注意深く見ていただくべき部分は
全データ(注釈5番)の学習です。比較後、全学習コードを入れておきました。結果を比較してみましょう!
パラメーター(class_weight、ハイパーパラメーターなど)は、無条件に追加・変更すれば良くなるというものではありません。検証セットで直接
比較して採用するかどうかを決めなければなりません。
試験の状況でパラメータの判断に迷う場合は、デフォルト値(設定していない状態)で進めましょう。安定していることが重要だと思います!
もちろん、全データ学習も良い選択です!
コーディングパン(https://code.sideonai.com/)に作業型2の問題をアップデートしました。
ビッグデータ分析士の講義部分のすべてのコードにlightgbmを追加しました。 (

コーディングパン作業型2のベースラインをご案内します。EDA部分は除外しました。
1番目の問題
import pandas as pd # 1) データの読み込み train = pd.read_csv('data/car_train.csv') test = pd.read_csv('data/car_test.csv') # 2) カテゴリ変数のワンホットエンコーディング target = train.pop('target') print(train.shape, test.shape) train = pd.get_dummies(train) test = pd.get_dummies(test) print(train.shape, test.shape) # 3) 検証用データの分割 (提出前の性能比較) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0, stratify=target) # 4) 3つのモデルの学習 from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(random_state=0) rf.fit(X_tr, y_tr) pred = rf.predict(X_val) from sklearn.metrics import f1_score print(f1_score(y_val, pred, average='macro')) from lightgbm import LGBMClassifier lgb = LGBMClassifier(random_state=0, verbose=-1) lgb.fit(X_tr, y_tr) pred = lgb.predict(X_val) print(f1_score(y_val, pred, average='macro')) from xgboost import XGBClassifier xgb = XGBClassifier(random_state=0, verbosity=0) xgb.fit(X_tr, y_tr) pred = xgb.predict(X_val) print(f1_score(y_val, pred, average='macro')) # 5) 選択したモデルを全trainデータで再学習後、testを予測 (選択) # lgb.fit(train, target) # pred = lgb.predict(test) # 6) 提出ファイルの保存 (predカラム1つのみ、indexは除外) result = pd.DataFrame({'pred': pred}) result.to_csv('result.csv', index=False) # 提出ファイルの確認 print("\n ===== 提出ファイル (サンプル) =====") print(pd.read_csv("result.csv").head()) print("\n ===== 提出ファイル (サイズの確認) =====") print(pd.read_csv("result.csv").shape)2番の問題
import pandas as pd # 1) データの読み込み train = pd.read_csv('data/bike_train.csv') test = pd.read_csv('data/bike_test.csv') # 2) カテゴリ変数のワンホットエンコーディング target = train.pop('count') print(train.shape, test.shape) train = pd.get_dummies(train) test = pd.get_dummies(test) print(train.shape, test.shape) # 3) 検証用データの分割 (提出前の性能比較) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0) # 4) 3つのモデルの学習 from sklearn.ensemble import RandomForestRegressor rf = RandomForestRegressor(random_state=0) rf.fit(X_tr, y_tr) pred = rf.predict(X_val) from sklearn.metrics import root_mean_squared_error print(root_mean_squared_error(y_val, pred)) from lightgbm import LGBMRegressor lgb = LGBMRegressor(random_state=0, verbose=-1) lgb.fit(X_tr, y_tr) pred = lgb.predict(X_val) print(root_mean_squared_error(y_val, pred)) from xgboost import XGBRegressor xgb = XGBRegressor(random_state=0, verbosity=0) xgb.fit(X_tr, y_tr) pred = xgb.predict(X_val) print(root_mean_squared_error(y_val, pred)) # 5) 選択したモデルを全trainデータで再学習し、testを予測 (選択) # lgb.fit(train, target) # pred = lgb.predict(test) # 6) 提出ファイルの保存 (predカラム1つのみ、indexは除外) result = pd.DataFrame({'pred': pred}) result.to_csv('result.csv', index=False) # 提出ファイルの確認 print("\n ===== 提出ファイル (サンプル) =====") print(pd.read_csv("result.csv").head()) print("\n ===== 提出ファイル (サイズ確認) =====") print(pd.read_csv("result.csv").shape)作業型1、作業型3の模擬問題をアップデートしました! 🎉
試験環境とできるだけ似た環境で解けるようにコーディングパン(Coding Pang)サイトを作ったのですが、そこに新しい問題をアップロードしました。
実際の試験のようにコードを直接書きながら解くことができるので、ぜひアクセスして練習してみてください 😊 試験の合格を心より応援しています!
👉 コーディングパンリンク: code.sideonai.com

まだベータ版ですので、もしバグがあれば教えてください!
試験が1週間後に迫ってきましたね。
ビッグデータ分析実技試験準備ライブ1週間前の集まり(6.13)の録画分を共有します。
1時間ほどの内容なので、倍速で一度ざっと目を通してみてください!
皆さん、頑張ってください :)

(講義全体の時間制限により、第12回試験後に削除予定)
試験が2週間後に迫ってきました!
試験環境を一度確認してみてください。
(確認だけしていただき、実際の学習は速度のために従来のColabで引き続き進めてください!)ただし、実際の試験環境では、外部リンクからデータを読み込んだり、ファイルをアップロードしたりすることは不可能です。
この点を補完するために、従来使用されていたリンク方式とファイルアップロードの両方が可能な
「コーディングパン」ベータ版の環境を新しく作ってみました。
リンク: code.sideonai.com
まだベータ段階であるため、至らない点があるかもしれません。使ってみて不便な点があれば、いつでもフィードバックをください。積極的に反映させていただきます。 🙏
Google Chrome(クローム)ブラウザを推奨しており、実行速度はお使いのノートパソコン(PC)の性能によって異なる場合があります!
第12回試験の実施が案内されました。
従来の試験内容と同じであり、変更内容は文言・表記方式の改善レベルです
以前にも似たような言葉がありましたが、作業型2で
「優れた評価指標を獲得するためには、最適なモデルを探索しなければならない」との記載がありますので
少なくとも2つのモデル(ランダムフォレスト、LightGBM)は準備が必要です。
https://www.dataq.or.kr/www/board/view.do?boardKind=notice&bbsKey=eyJiYnNhdHRyU2VxIjoxLCJiYnNTZXEiOjU3OTAxM30=
残りの期間も応援しています!!

