SQLとPythonを使ったアドテク面接の質問:完全ガイド

最終更新: 8 4月2026
  • アドテク分野の技術面接では、中級レベルのSQL、Python(pandasを含む)、および分析スキルが重視されます。
  • SQLにおけるJOIN、GROUP BY、サブクエリ、ウィンドウ関数、そしてそれらに相当するpandasの関数を習得することが不可欠です。
  • 精度、F1スコア、ROC-AUCなどのモデル評価指標を理解することは、高度な分析業務において価値を高めます。
  • 効果的な準備とは、理論、多くの実践的な演習、そして論理的思考を声に出して説明する能力の習得を組み合わせたものである。

アドテク面接の質問:SQLとPython

アドテク、デジタルアナリティクス、データ分析の面接を控えているなら、遅かれ早かれ、誰もが恐れる技術テストに直面することになるでしょう。企業はそこで、履歴書に書いた内容を本当に習得しているかどうかを確認します。つまり、データを抽出するSQL、データを処理・分析するPython、そして膨大な表やスクリプトの中で迷子にならないための分析的思考力などです。

朗報は、技術面接は魔法ではないということです。通常はSQL、Python、モデル評価といった基本的な内容が中心となります。基礎をしっかり理解し、実際の演習で練習し、自分の考えを説明できるようになれば、他の候補者よりも大きなアドバンテージを得られるでしょう。

技術面接が怖い理由(そしてその不安を和らげる方法)

人工知能パラメータ
関連記事:
人工知能のパラメータとそれがモデルを形成する仕組み

アドテク分野のデータアナリストやプロダクト担当者の職種では、技術面接では通常、概念的な質問と実際の作業を伴う演習が組み合わされます。SQL句の機能について説明を求められたり、プログラマティック広告キャンペーンのデータに関するビジネスケースを解決させられたりするかもしれません。

選考は通常、以下の3つの側面から行われます。中級レベルのSQL(JOIN、GROUP BY、サブクエリ、ウィンドウ関数)、データ指向のPython (pandas、データクリーニング、集計、マージ)、そして結果を解釈し、知見を伝える能力です。彼らが求めているのは、上級データサイエンティストではなく、堅牢かつ信頼性の高い方法でデータを扱える人材です。

多くの応募者が犯しがちな典型的な間違いは、構文の暗記にばかり集中し、 HackerRank、StrataScratch、あるいは企業独自の内部テストなどで出題されるような、完全な演習問題を練習することを忘れてしまうことです。面接に臨む際には、すでに数十もの非常に似たクエリやスクリプトを解けるようにしておくことを目標にすべきです。

アドテクやデータアナリストの面接では、通常SQLレベルが求められます。

アドテクやデジタルマーケティング分野のアナリスト職では、企業は古典的なリレーショナルSQLに精通していることを期待しています。具体的には、複数のテーブルからデータを抽出し、結合、グループ化、フィルタリングを行い、有用な指標を作成できる能力が求められます。データベース管理スキルは必須ではありませんが、中程度の複雑さのクエリを扱える能力は必要です。

通常、テストには、INNER JOIN、LEFT JOIN、WHERE句を使用したフィルタ、GROUP BY句を使用した集計、およびHAVING句を使用した集計に対する条件を組み合わせたクエリが含まれます。さらに高度なレベルでは、ランキング、累積合計、行比較のためにサブクエリやウィンドウ関数が使用されることもよくあります。

アドテク分野では、「業界平均よりもクリック率が高いキャンペーンはどれか?」や「先月と比べてインプレッション数が減少しているパブリッシャーはどれか?」といったビジネス上の疑問に答えることになるでしょう。これらの疑問を効率的に解決するには、相関サブクエリとウィンドウ関数に関する基本的な理解が通常必要となります。

よくある質問とその回答方法(SQLの基本事項)

データ関連の技術面接では、ほぼ必ず基本的なSQL理論に関する質問が出題されます。これはあなたを陥れようとしているのではなく、あなたがしっかりとした基礎知識を持っているかどうかを確認するためのものです。

よくある質問の一つに、WHERE句とHAVING句の違いがあります。最も分かりやすく説明すると、WHERE句はグループ化する前に個々の行をフィルタリングするのに対し、HAVING句は既に集計されたグループをフィルタリングします。また、集計関数(COUNT、SUM、AVGなど)を含む条件は、WHERE句ではなくHAVING句に記述する必要があることも付け加えておきましょう。

もう1つの定番の質問は、どのような種類のJOINが存在し、それぞれをいつ使用するかということです。INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN、そして場合によってはCROSS JOINまたは自己結合があります。データ分析では、LEFT JOINは、セカンダリテーブル(たとえば、購入)に関連付けられたレコードがない場合でも、プライマリデータセット全体(たとえば、すべてのユーザー)を保持したい場合に広く使用されます。

基本的なSQLクエリの例とそのロジック

「最低限必要な」レベルの目安として、特定の列の選択、行のフィルタリング、結果のソートなど、記憶に基づいてクエリを作成できる能力が求められます。ごく基本的なレベルでは、テーブルからすべての列を抽出する方法、一部の列のみを選択する方法、ASで読みやすいエイリアスを適用する方法などが典型的な質問として挙げられます。

また、AND、OR、NOTを組み合わせた複数の条件を含むWHERE句の使い方や、数値と日付の両方で比較演算子(<、<=、>、>=、=)を使用する方法についてもよく質問されます。多くの企業はNULLフィルタを重視しており、単に等号を使用するだけでは不十分で、IS NULLまたはIS NOT NULLを使用する必要があります。

もう一つの定番は、 LIKE演算子とワイルドカード(%と_)を使ったパターンによるテキストベースのフィルタリングです。例えば、特定の単語を含むキャンペーン名や、特定のドメインで終わるメールアドレスを持つユーザーを検索できます。LIKE '%text%'は、文字列内のどこかにパターンが存在するかを検索することに注意してください。

最後に、この基本セクションでは、UPDATE 句を使用してレコードを更新する方法、WHERE 句を使用して変更する行をフィルタリングする方法、および明確な条件を使用してDELETE FROM 句で行を削除する方法について説明します。テーブルの半分を誤って削除してしまうことを避けるため、常に特定の WHERE 句を使用することの重要性を強調することが不可欠です。

中間クエリ:GROUP BY、HAVING、サブクエリ、UNION

ジュニアレベルを超えると、ほとんどすべての企業が、GROUP BY、集計関数、HAVING句を用いた集計に対するフィルタの組み合わせを熟知していることを高く評価し始めます。これらは、キャンペーン、オーディエンス、クリエイティブのパフォーマンスレポートを作成するために日常的に使用するスキルです。

  n8nとDockerを使ってワークフローを自動化する方法

GROUP BY句は、1つまたは複数の列で行をグループ化し、これらのグループに対してSUM、COUNT、AVG、MIN、MAXなどの関数を適用して指標を計算できます。次にHAVING句を使用して、特定の条件を満たすグループのみを保持します。たとえば、売上が一定のしきい値を超える顧客のみを保持できます。

もう一つよく見られるテーマはサブクエリです。これは、クエリの中に別のクエリを配置する構造です。サブクエリは、前のステップで計算された値に基づいてフィルタリングを行う際によく使用されます。例えば、売上高が世界平均を上回る顧客を選択したり、インプレッション数が上位90%を超えるキャンペーンを選択したりする場合などです。

UNIONとUNION ALLの違いについてもよく質問されます。UNIONは同じスキーマを持つ2つの結果セットを結合し、重複を削除します。UNION ALLも同様の処理を行いますが、重複している行も含め、すべての行を保持します。データ分析においては、パフォーマンス上の理由と、元のレコードをすべて保持したいという理由から、UNION ALLが好まれることが多いでしょう。

ウィンドウ関数:SQLにおける次の飛躍

ウィンドウ関数は、一定レベルの技術テストにおいて標準的な手法となっており、特に、時間の経過に伴う傾向、キャンペーンのランキング、投資総額などを分析する必要があるアドテク関連の役割において広く用いられています。

重要な点は、ウィンドウ関数は現在の行に関連する行のセットに対して値を計算するものの、GROUP BYのように結果を集約しないということです。つまり、個々の行はそのまま表示されますが、データの「ウィンドウ」に対して計算された集計値が併せて表示されます。

一般的な構文は、関数(SUM、AVG、RANKなど)の後にOVER句を記述し、OVER句内でパーティション(PARTITION BY)と順序(ORDER BY)を指定するというものです。例えば、営業担当者別の売上ランキングや、1日あたりの累積インプレッション数を計算する場合などに使用します。

熟練度を証明したいのであれば、RANK、DENSE_RANK、ROW_NUMBER、LAG、LEADといった関数を使いこなせるようにしておくべきです。これらの関数は、キャンペーンのパフォーマンスに基づいてランキングを作成したり、各期間を前の期間と比較したり、主要指標の前年比変動を特定したりする際に非常に役立ちます。

CTE、累積合計、移動平均

現代の就職面接では、SQLコードの読みやすさが非常に重視されます。そのため、共通テーブル式(CTE)についてよく質問されます。CTEは基本的に、WITH句で定義される名前付き一時テーブルの一種で、クエリの実行時のみ存在します。

CTE(共通テーブル式)は、複雑なクエリを論理的なブロックに分割し、中間結果を再利用するために使用されます。たとえば、まずCTEでキャンペーンごとの日次指標を計算し、次にメインクエリでその結果に対して追加の集計やフィルタリングを実行します。

もう一つよく行われるのは、 SUM関数をウィンドウ関数として使用して累計値を計算することです。広告テクノロジーの分野では、キャンペーンの長期的なパフォーマンスを確認するために、累積インプレッション数、クリック数、または支出額を求められるのが一般的です。

これに関連するのが移動平均です。移動平均では、AVG関数をシフトした行フレーム(例えば、過去2日間と現在日)に対してウィンドウ関数として適用します。これは、日々のピーク値に過度に依存することなく、時系列データを平滑化し、トレンドを検出する簡単な方法です。

データアナリストに求められるPythonレベル

ほとんどのデータアナリスト職(アドテク業界を含む)では、企業はあなたに機械学習のエキスパートであることを期待していませんが、Pythonとpandasを実用的に使いこなせる能力は期待しています。通常、データセットの読み込み、クリーニング、変換、そしてシンプルな指標や可視化の取得が求められます。

Pythonのテストは通常​​、CSVファイルからのデータ読み込み、null値や列型の検査、行のフィルタリング、新しい列の作成、groupbyを使用した集計、DataFrame間の結合といった操作に焦点を当てています。多くの場合、記述内容はSQL部分とほぼ同じですが、pandas形式になっています。

アナリストのテストで、複雑なモデルをゼロから構築することが求められることは一般的ではありませんが、scikit-learnと連携して基本的なモデルをトレーニングする能力、そして何よりも、そのパフォーマンスを測定するための基本的な指標に関する知識は高く評価される可能性があります。

習得すべき基本的なpandas操作

Pythonのデータ演習を成功させるには、基本的なDataFrame操作を習得しておく必要があります。最初のステップは通常、`read_csv`を使用してファイルを読み込み、`head()`、`info()`、`describe()`などのメソッドを使用してその構造を調べることです。

null 値のクリーンアップに関する部分も通常登場します。isnull().sum() を使用して列ごとに null の数をカウントし、dropna() を使用して行または列全体を削除するか、fillna() を使用して欠落している行または列を埋めるかを決定します。たとえば、列の平均値または中央値を使用します。

フィルターに関しては、数値列またはカテゴリ列に対して条件を作成するように求められます。例えば、一定額以上の売上を選択したり、& と | を組み合わせた複数の条件を満たす行を選択したりといった具合です。重要なのは、迷うことなくdf を記述する方法を理解することです。

pandasの`groupby`の説明は、SQLの`GROUP BY`と直接同等であるため、ほぼ必ず含まれています。1つまたは複数の列でグループ化し、`sum`、`mean`、`count`などの集計を適用します。`groupby('column').agg()`という構文は必須です。

データフレーム間の結合とマージ

SQLでJOINをマスターすることが不可欠なのと同様に、 pandasではpd.mergeをマスターすることが必須です。企業は、例えばユーザーテーブルとイベントテーブルや購入テーブルのように、共通のキーを持つデータセットを結合する方法をあなたが知っているかどうかを確認したがります。

merge関数は、結合する2つのDataFrame、キー列(on)、および結合タイプ(how)を引数として受け取ります。結合タイプは、SQLと同様に「left」、「right」、「inner」、「outer」のいずれかです。データ分析では、主にメインデータセットを保持し、セカンダリテーブルから属性やメトリックを追加する場合に、左結合が使用されます。

  Luaとは何か:歴史、設計、実際の使用法、言語の主な特徴

面接では、両側に重複するキーが存在する場合の処理​​方法や、パラメータの接尾辞による列名の競合への対処方法など、具体的な内容に触れると良いでしょう。これは、あなたの成熟度の高さを印象づけることになります。

典型的な、より理論的なPythonに関する質問

pandas以外にも、多くの面接では、 Pythonの理解度を確認するために、 Python全般に関する短い質問が出されます。これらの質問は通常、機能、メモリ、データ型、あるいは構文の簡単な部分に関するものです。

繰り返し取り上げられるトピックの一つに、Pythonにおける自動メモリ管理がある。これは、ユーザーが直接アクセスしないプライベートヒープと、参照がなくなったオブジェクトを解放する役割を担うガベージコレクタに基づいている。

PythonとJavaを比較するよう求められることもよくありますが、これはどちらが優れているかを断言するためではなく、両者の違いを理解していることを示すためです。Pythonはより動的で、構文も簡潔であり、プロトタイピングやデータサイエンスに最適です。一方、Javaはより企業向けで高性能なエコシステムにおいて主流となっています。

その他によくある質問としては、ラムダ式(単純な操作を行うための匿名関数)、オブジェクトをバイト列にシリアル化して取得するためのピクル化/アンピクル化処理、あるいはリストとタプルの違い(前者は可変で角括弧で定義され、後者は不変で丸括弧で定義される)などが挙げられます。

面接で役立つPythonの重要な概念

Pythonでオブジェクトを削除したりコピーしたりする方法についてよく質問されます。通常は、`del`文を使って参照を削除できること、浅いコピーは`copy.copy()`で、深いコピーは`copy.deepcopy()`で行うことを説明すれば十分です。

特にバックエンドのプロファイルでよく見られるもう1つの概念は、いわゆるドッグパイル効果です。これは、多数のユーザーまたはプロセスが同時にリソース(たとえば、Webサイトやキャッシュ)を攻撃し、システムを飽和させるシナリオを指します。

エコシステムに関連して、Pythonで使用できるデータベースに関する質問を受けることもあるでしょう。最も適切な方法は、MySQL、PostgreSQL、SQLite、MongoDB、Oracleといった代表的なデータベースを挙げ、Pythonは一般的に、さまざまなリレーショナルデータベースやNoSQLデータベースエンジンとうまく連携できることを説明することです。

最後に、より単純な質問がよく発生します。例えば、項目に基づいて辞書をソートする方法、名前空間とは何か、そしてそれが何のために使用されるか(異なるスコープのオブジェクトに名前を関連付けるため)、またはrun()やPopen()などの関数を使用してsubprocessモジュールでサブプロセスを起動する方法などです。

Pythonでモデルを評価するための指標:最低限知っておくべきこと

多くのアナリスト職では深層学習アーキテクチャの設計は求められませんが、特にデータ製品、キャンペーンアトリビューション、アドテクにおける不正検出などに関わる役割の場合、分類モデルを評価するための基本的な指標に精通していることが一般的です。

出発点は混同行列です。これは、二値分類器または多クラス分類器の成功と失敗をまとめたものです。二値分類の場合、真陽性(TP)、真陰性(TN)、偽陽性(FP)、偽陰性(FN)に分類されます。これら4つのカテゴリを十分に理解することが重要です。

このマトリックスからは、正解率(全体の予測数に対する正解数の割合)、適合率(TP/陽性予測数)、再現率または感度(TP/実際の陽性数)などの指標が導き出されます。特に、クラスのバランスが崩れている場合は、この最後の2つの指標が重要になります。

F1スコアは、調和平均を用いて精度と再現率を組み合わせた指標であり、どちらかのスコアが特に低い場合はペナルティが課されます。これは、不正検出、リードスコアリング、疾病検出など、偽陽性と偽陰性の両方がコストのかかるシナリオでよく用いられる指標です。

その他の高度な指標:ROC-AUC、logloss、Jaccardなど

データサイエンスやマーケティング分析の要素がより強い職種の場合、企業は、ROC曲線下の面積を測定し、モデルがクラスを分離する能力を反映するROC-AUCのような、より高度な指標を習得しているかどうかを重視します。

ROC曲線は、異なる判定閾値における真陽性率(再現率)と偽陽性率(1-特異度)の関係を表します。ランダムなモデルは対角線上に位置し、優れたモデルは左上隅に近い位置になります。曲線下の面積が大きいほど、識別能力が高いことを示します。

もう一つの一般的な指標は対数損失(logloss)で、予測確率の質を評価するもので、過信や誤りに対しては厳しくペナルティを課します。理想的なモデルでは対数損失は0となり、一般的に対数損失が低いほど良いとされます。

また、ジャッカード係数について質問される場合もあります。ジャッカード係数は、2つの集合の類似性を、共通部分のサイズを和集合のサイズで割った値として測定する指標です。分類器、セグメンテーション、レコメンデーションシステムなどの評価に用いられます。

場合によっては、ゲインチャートやリフトチャートが用いられます。これは、対象者の一部(例えば、モデルによって評価された上位20%のユーザー)のみを使用して、どれだけのターゲットを獲得できるかを示すものです。これは、マーケティングにおいて、最初に誰をターゲットにするかを決定する際に広く用いられています。

コルモゴロフ・スミルノフ検定、ジニ係数、および詳細な評価

企業がスコアリングやリスクモデルに重点を置いている場合、コルモゴロフ・スミルノフ(KS)統計量などの指標が用いられることがあります。これは、正のスコアと負のスコアの分布間の分離度を測定するものです。

KS値が100に近い(パーセンテージで表した場合)ということは、モデルが2つの集団をほぼ完全に分離していることを示します。一方、0に近い値は、モデルが偶然よりも優れた分離能力を持たないことを意味します。実際には、現実世界のモデルは中間値の範囲に収まり、最適なモデルを選択するために互いに比較されます。

  ビデオゲームプログラミング: 始め方 - ステップバイステップガイド

ジニ係数は、ROC-AUCから導出されるもう一つの指標で、式は Gini = 2 × AUC – 1 です。信用や保険の分野で非常に広く用いられており、不平等の尺度としても解釈されます。ジニ係数が高いほど、モデルが真陽性をより高いスコアに集中させる能力が高いことを意味します。

より高度な面接では、これらの指標がscikit-learnを使用してPythonでどのように実装されているか(例:confusion_matrix、accuracy_score、roc_auc_score、f1_scoreなど)を説明するよう求められたり、問題の性質やクラスの不均衡に応じて、それぞれの指標をいつ使用するかについてコメントするよう求められたりする場合があります。

技術面接での回答の構成方法

面接官は、あなたが書くコードだけでなく、あなたの思考プロセスや説明の仕方にも注目します。たとえ正しい解決策を知っていても、構成の悪い回答は、実際よりも経験が浅い印象を与えてしまう可能性があります。

技術的な質問に答える際の非常に有効なアプローチは次のとおりです。まず、概念を1文で説明し、次に具体的な例(理想的には自分のプロジェクトに関連したもの)を示し、必要に応じて代替案やニュアンスについて言及します。これは、SQL、Python、モデルメトリクスなど、あらゆる場面で同様に有効です。

例えば、CTEは何のために使うのかと聞かれた場合、複雑なクエリの可読性を向上させる名前付きの一時的なサブクエリであると説明し、中間結果を複数回再利用する必要がある場合に使用すること、そして、場合によってはネストされたサブクエリで置き換えることもできるが、その場合はCTEほど明確ではないと付け加えることができます。

声に出して考えることも重要です。行き詰まったら、黙っていてはいけません。自分が何をしようとしているのか、どんな情報が不足しているのか、どんな前提を置いているのかを言葉にしてみましょう。そうすることで、面接官はあなたの思考プロセスを理解しやすくなり、時には前に進むためのヒントや明確化を得られることもあります。

技術データ面接でよくある間違い

多くの候補者は、SQLやPythonのスキルが不足しているからではなく、準備不足とコミュニケーションミスが重なったために落選してしまう。よくある落とし穴を十分に理解し、それらを避けることが極めて重要だ。

一つ目は、理解せずに暗記することです。RANKやラムダ関数の構文を知っていても、それらのツールをどのような場合に使うのか、あるいはなぜ他の代替手段よりも優れているのかを説明できなければ、あまり役に立ちません。

もう一つよくある間違いは、演習でデータ品質を十分に検討しないことです。データセットが与えられた場合、集計を開始する前に、分析結果を歪める可能性のある欠損値、重複データ、外れ値がないかを確認することをお勧めします。これは、的確な判断力と実践的な経験を示すことになります。

明確化のための質問を避けることも非常に有害です。例えば、広告キャンペーンに関するビジネスケースでは、季節性、ターゲット期間、ユーザー単位の指標を求めるのか、インプレッション単位の指標を求めるのかなどについて質問するのは当然のことです。沈黙を守り、憶測に基づいて行動すると、面接官が想定していたものとはかけ離れた解決策につながることがよくあります。

最後に、「過剰コーディング」の手法は避けましょう。クエリやスクリプトをよりシンプルにできるにもかかわらず、不必要に複雑なソリューションを作成するのは避けるべきです。実際の業務環境では、パズルのような複雑なソリューションではなく、明瞭さ、保守性、効率性が重視されます。

2週間の集中準備計画

面接までの時間が限られている場合は、SQL、Python(pandas使用)、そして実践的な応用という3つの主要分野を網羅した簡潔な学習プランに従うと良いでしょう。14日間で劇的な進歩を遂げることはできませんが、確かなスキルレベルとそれなりの自信を持って面接に臨むことができます。

最初の数日間は、初級から中級レベルのSQLに集中するのが良いでしょう。基本的な構文、JOIN、GROUP BY、サブクエリ、そしてよく使われるウィンドウ関数などを復習してください。例題を読む時間と、自分でクエリを作成する時間の両方を確保しましょう。

第2段階では、pandasに焦点を当てます。データの読み込み、クリーニング、フィルタリング、グループ化、マージ、そしてmatplotlibやseabornを使った簡単な可視化を行います。複雑なダッシュボードを作成する必要はありませんが、SQLで行うのと同じ変換をPythonで再現できる必要があります。

次に、HackerRankや技術面接対策リポジトリなどのプラットフォームで実践的な演習を行うために数日間を確保しましょう。目的は、管理された環境でコードを書く際の形式、時間制限、プレッシャーに慣れることです。

最後に、面接のシミュレーションを1つか2つ試してみてください。公開されているデータセットを用意し、妥当なビジネス上の質問を立て、SQLまたはPythonを使ってそれらを解決し、最初の調査から最終的な結論に至るまでの推論全体を声に出して説明します。

理論的な復習、指導付きの実践練習、そして現実的な演習をバランス良く組み合わせることで、面接当日には中級レベルのSQL、データ分析のためのPython、そしてモデル指標に関する確固たる基礎知識を身につけているでしょう。これはまさに、広告技術やデータ分析分野のほとんどの企業が期待しているものです。