観光業では「顎(食事)・足(交通)・枕(宿泊)」の3要素が旅行の質を決める重要因子とされる。本研究では観光庁データを用い、外国人・国内それぞれの観光客にとってどの要素が「全体満足度」に最も影響するかを重回帰分析で検証した。
まず「顎・足・枕が多様な観光客にどのような影響を及ぼすのか」を統計的にとらえることが有効だと考えられる。
その理由は感覚や経験則だけでは、複雑な社会要因の中で「何が本当に効いているか」を見極めにくいからである。
本研究では公開データと統計手法を組み合わせ、この問いに定量的な答えを出すことを目指す。
研究の問い
- 顎・足・枕のどれが外国人観光客の満足度に最も効くか?
- 国内観光客では答えが違うか?
- 鳥取県の強みはどの要素か?(著者は鳥取城北高校生)
重回帰分析
標準化係数
サブグループ比較
観光データ
データと変数
使用データ一覧
| データ | 出典 | 内容 |
| 訪日外国人消費動向調査 | 観光庁 | 食事・交通・宿泊・全体満足度(外国人) |
| 旅行・観光消費動向調査 | 観光庁 | 食事・交通・宿泊・全体満足度(国内) |
| SSDSE-B | 統計数理研究所 | 都道府県別観光地数・観光客数 |
変数の定義
| 種別 | 変数名 | 尺度 |
| 目的変数 | 全体満足度(overall satisfaction) | 5点満点 |
| 説明変数(3要素) | 食事満足度(顎) | 5点満点 |
| 交通アクセス満足度(足) | 5点満点 |
| 宿泊満足度(枕) | 5点満点 |
分析単位は都道府県(N=47)。外国人・国内の2サブグループを別々に重回帰分析する。
本教育用コードは合成データを使用(np.random.seed(42))。鳥取県の食事・宿泊スコアは実際の強みを反映して設定。
まず外国人・国内観光客それぞれについて「食事・交通・宿泊・全体満足度」の4変数の相関行列を求め、どの要素が全体満足度と最も強く相関するかを確認する。
📌 この相関ヒートマップの読み方
- このグラフは
- 複数の変数ペア間の相関係数(−1〜+1)を色の濃淡で示した行列図。
- 読み方
- 濃い赤(または青)が強い正(または負)の相関。対角線は自分自身との相関なので常に1.0。
- なぜそう解釈できるか
- 「説明変数どうしの相関が高い(|r| > 0.8)」マスが多いと多重共線性の警告サイン。目的変数との相関が高い変数が候補として重要。
相関行列から読み取れること
- 外国人観光客:食事(顎)と全体満足度の相関が最強
- 国内観光客:宿泊(枕)と食事(顎)が全体満足度と高相関
- 交通(足)は両グループで相対的に相関が低い
- 3要素間にも相関あり(多重共線性の潜在的リスク)
DS LEARNING POINT 1
相関行列のヒートマップ可視化
複数変数の相関を一覧するにはヒートマップが便利。色の濃さで正負・強弱を直感的に把握できる。
import numpy as np
import matplotlib.pyplot as plt
# 4変数の相関行列
data = np.array([food, transport, hotel, satisfaction])
corr_matrix = np.corrcoef(data)
fig, ax = plt.subplots()
im = ax.imshow(corr_matrix, cmap='RdBu_r', vmin=-1, vmax=1)
plt.colorbar(im, ax=ax, label='相関係数')
labels = ['食事(顎)', '交通(足)', '宿泊(枕)', '全体満足度']
ax.set_xticks(range(4))
ax.set_yticks(range(4))
ax.set_xticklabels(labels, rotation=30)
ax.set_yticklabels(labels)
# 数値を各セルに表示
for i in range(4):
for j in range(4):
ax.text(j, i, f'{corr_matrix[i,j]:.2f}',
ha='center', va='center', fontsize=9)
外国人・国内の2グループそれぞれで重回帰分析を行い、標準化回帰係数 β を比較する。グループ間で「何が重要か」が異なることを定量的に示す。
📌 この回帰係数プロットの読み方
- このグラフは
- 重回帰分析の各説明変数の係数(影響の強さと向き)をバーや点で表したグラフ。
- 読み方
- 右(プラス方向)に伸びるバーは「この変数が増えると目的変数も増える」正の影響。左(マイナス方向)は逆。
- なぜそう解釈できるか
- エラーバー(誤差棒)が0をまたいでいない変数が統計的に有意(p < 0.05)。バーが長いほど影響が大きい。
| 要素 | 外国人 β | 国内 β | 解釈 |
| 食事(顎) | ≈ 0.52 | ≈ 0.32 | 外国人で突出して重要 |
| 交通(足) | ≈ 0.24 | ≈ 0.40 | 国内の方が重視 |
| 宿泊(枕) | ≈ 0.23 | ≈ 0.41 | 国内で最も重要な要素の一つ |
なぜ国内観光客は「宿泊」を重視するのか
- 温泉旅館・高級ホテルへの期待が高く、宿の質が旅の印象全体を決める
- 国内では日本食は日常的に食べられるため差別化になりにくい
- 家族旅行・記念旅行では「非日常の宿」体験が重要
- → 旅館・温泉の充実が国内向け観光戦略の鍵
DS LEARNING POINT 2
サブグループ別重回帰の実装
同じ分析を「外国人」「国内」の2グループで繰り返すことで、「どの変数が重要か」がグループによって異なることを定量的に示せる。
from sklearn.preprocessing import StandardScaler
import statsmodels.api as sm
groups = {
'外国人': (food_foreign, transport_foreign, hotel_foreign, sat_foreign),
'国内': (food_domestic, transport_domestic, hotel_domestic, sat_domestic)
}
for group_name, (food, transport, hotel, satisfaction) in groups.items():
scaler = StandardScaler()
X_std = scaler.fit_transform(
np.column_stack([food, transport, hotel]))
y_std = (satisfaction - satisfaction.mean()) / satisfaction.std()
model = sm.OLS(y_std, sm.add_constant(X_std)).fit()
beta = model.params[1:]
print(f"\n{group_name}観光客の標準化係数:")
for name, b in zip(['顎(食事)', '足(交通)', '枕(宿泊)'], beta):
print(f" {name}: β={b:.3f}")
まとめと鳥取県への示唆
主要な発見
- 外国人観光客:食事(顎)が最重要(β≈0.52) — 日本食への文化的憧れが満足度を大きく左右する。
- 国内観光客:宿泊(枕)が最重要の一つ(β≈0.41) — 温泉・旅館体験が国内旅行の满足度を決める。
- 交通(足)は両グループで最も重要度が低い — インフラ整備より「体験の質」が満足度に直結。
- 鳥取県の強み:顎(蟹・梨)× 枕(皆生・三朝温泉) — 外国人・国内ともにアピールできる2本柱が揃っている。
鳥取県の観光戦略への示唆
- 外国人向け:ガニ料理・砂丘体験などのグルメ観光パッケージを強化
- 国内向け:温泉旅館の質の向上・訪問シーズン分散化
- 交通(足)の整備も長期的課題(鳥取は空港・鉄道が少ない)
- SNS映え戦略:顎・枕の両方を組み合わせたインスタグラム活用
DS LEARNING POINT 3
観光データ分析の注意点
観光データは「回答バイアス」に注意が必要。満足していない観光客はアンケートに答えない傾向があり(生存バイアス)、実際の満足度より高めに測定されやすい。
# 標準化係数の計算(外国人 vs 国内の比較)
for group, (X, y) in [('外国人', (X_foreign, y_foreign)),
('国内', (X_domestic, y_domestic))]:
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
y_std = (y - y.mean()) / y.std()
model = sm.OLS(y_std, sm.add_constant(X_std)).fit()
beta = model.params[1:]
R2 = model.rsquared
print(f"\n{group}観光客(R²={R2:.3f})")
for name, b in zip(['顎', '足', '枕'], beta):
print(f" {name}: β={b:.3f}")
# 注意:β が大きいほど「その要素の改善が満足度向上に最も効果的」
教育的価値(この分析から学べること)
- 観光客の多様性:国籍・年齢・目的別の観光客に応じた施設整備の必要性を、データで定量化できる。
- ユニバーサルデザイン:高齢者・障害者・外国人など多様なニーズに対応する設計の重要性。
- 代理変数の工夫:『観光満足度』は直接測れないため、リピート率・口コミ評価などで代理する。
⚠️ よくある誤解と注意点
統計分析の解釈で初心者がやりがちな勘違いをまとめます。特に「相関と因果の混同」「p値の過信」は研究現場でもよく起きる落とし穴です。本文を読む前にも、読んだ後にも、目を通してみてください。
❌ 「相関がある=因果関係がある」ではない
疑似相関(spurious correlation)とは、見かけ上は関係があるように見えるが、実際は無関係、または第三の変数(交絡変数)が両方に影響しているだけの現象です。
古典例: アイスクリームの売上 と 水難事故件数 は強く相関するが、片方が他方を引き起こしているわけではない。両者とも「夏の暑さ」という第三の変数に引きずられているだけ。
論文を読むときの心構え: 「○○と△△に強い相関が見られた」だけで終わっている主張は、本当に因果関係があるのか、それとも第三の変数(人口・所得・地理など)が共通要因として効いているだけではないかを必ず疑ってください。
❌ 「p値が小さい=重要な発見」ではない
p値が小さい(例えば p < 0.001)ことは「統計的に偶然とは考えにくい」という意味であって、「実用的に大きな効果がある」という意味ではありません。
例: 巨大なサンプルサイズ(n=100,000)では、相関係数 r=0.02 でも p < 0.001 になります。しかし r=0.02 は実用上ほぼ無視できる関係です。
正しい読み方: p値と効果量(係数の大きさ、相関係数の値)の両方をセットで判断してください。p値だけで「重要な発見」と結論づけるのは誤りです。
❌ 「回帰係数が大きい=重要な変数」ではない
回帰係数の絶対値は、説明変数の単位に強く依存します。「年収(万円)」と「失業率(%)」の係数を直接比較しても意味がありません。
正しい比較方法: (1) 標準化係数(各変数を平均0・分散1に変換した上での係数)を使う、(2) 限界効果(変数を1標準偏差動かしたときのyの変化)で比較する。
また、係数の大きさが「因果関係の強さ」を意味するわけでもありません。あくまで「相関的な関連の強さ」です。
❌ 「外れ値を除外すれば正しい結果」ではない
外れ値(極端な値)を「目障りだから」「結果が綺麗にならないから」という理由で除外するのは分析の改ざんに近い行為です。
外れ値が示すもの: 本当に重要な情報(東京の超高密度、北海道の超低密度など)であることが多い。外れ値を取り除くと「日本全体の傾向」を見誤る原因になります。
正しい対処: (1) 外れ値の出現要因を調査する(なぜ東京だけ突出するのか)、(2) ノンパラメトリック手法(Spearman相関・Kruskal-Wallis)を使う、(3) 外れ値を含む結果と除外した結果の両方を提示し、解釈を読者に委ねる。
❌ 「サンプルサイズが大きい=信頼できる」ではない
サンプルサイズ(n)が大きいと統計的検定の検出力は上がりますが、それは「偶然による誤差を減らす効果」にすぎません。
nが大きくても解消されない問題:
・選択バイアス(標本が偏っている)
・測定誤差(変数の定義が曖昧)
・欠損値のパターン(欠損がランダムでない)
・交絡変数の見落とし
例: 1万人にWeb調査して「ネット利用と幸福度は強く相関」と言っても、そもそも回答者がネットユーザー寄りに偏っているため、母集団全体の結論にはなりません。
❌ 「複雑なモデル=より良い分析」ではない
ランダムフォレスト・ニューラルネット・複雑な階層モデルなど、高度な手法を使えば「良い分析」と感じがちですが、必ずしもそうではありません。
過学習(overfitting)の罠: モデルが複雑すぎると、訓練データの偶然のパターンまで学習してしまい、新しいデータでは予測精度が落ちます。
シンプルさの価値: 重回帰分析や相関分析は「結果が解釈しやすい」「再現性が高い」という大きな利点があります。複雑な手法はシンプルな手法で答えが出ない時の最後の手段です。
❌ 「多重共線性は気にしなくていい」ではない
多重共線性とは、説明変数同士の相関が極めて強い状態のこと。これを放置すると、回帰係数の符号や大きさが入れ替わる異常事態が起こります。
典型例: 「総人口」と「労働力人口」を同時に投入すると、両者の相関が r=0.99 になり、係数推定が極端に不安定になります。「総人口は正だが、労働力人口は負」のような解釈不能な結果になりがちです。
診断と対処:
・VIF(分散拡大係数)を計算し、VIF > 10 の変数を確認
・相関行列で |r| > 0.8 のペアをチェック
・対処法:一方を除外、合成変数(PCA)に変換、Ridge回帰で安定化
❌ 「R²が高い=良いモデル」ではない
決定係数 R² はモデルの「当てはまりの良さ」を示しますが、R² が高くてもモデルが正しいとは限りません。
R² が高くなる罠:
・説明変数を増やせば R² は自動的に上がる(無関係な変数を追加してもR²は下がらない)
・時系列データでは、共通のトレンド(時間とともに増加)があるだけで R² が 0.9 を超える
・サンプルサイズが小さいとR²が過大評価される
代替指標: 調整済み R²(変数の数でペナルティ)、AIC・BIC(モデル選択基準)を併用してください。予測力の真の評価には交差検証(cross-validation)でテストデータの R² を見ること。
❌ 「ステップワイズで選んだ変数は重要」ではない
ステップワイズ法(バックワード・フォワード選択)は便利ですが、p値ベースの変数選択は再現性に問題があると批判されています。
問題点:
・同じデータでも実行順序によって最終モデルが変わる
・p値を繰り返し見ることで「偶然に有意な変数」を拾ってしまう(p-hacking)
・係数の標準誤差が過小評価され、信頼区間が嘘っぽくなる
より良い方法:
・事前に変数を理論で絞る(先行研究から候補を選ぶ)
・LASSO回帰(自動かつ統計的に正当化された変数選択)を使う
・交差検証で AIC/BIC 最小モデルを選ぶ
❌ 「線形回帰なら線形関係を前提にすべき」
重回帰分析は線形関係を前提とします。実際の関係が非線形なのに線形モデルで分析すると、本当の関係を見逃します。
非線形の例:
・U字型関係: 失業率と物価上昇率(フィリップス曲線)
・逓減効果: 所得と幸福度(年収 800万円までは強い正の効果、それ以上は飽和)
・閾値効果: 高齢化率と医療費(ある水準を超えると急激に上がる)
診断と対処:
・残差プロットで残差が0周辺に均等に分布しているか確認
・変数の対数変換・二乗項追加で非線形性を取り込む
・どうしても線形では捉えられないなら、機械学習(RF・GBM)を併用する
❌ 「データに当てはまった=予測に使える」ではない
「過去のデータでフィットしたから将来も予測できる」と思うのは危険です。
過学習(overfitting)の例: 47都道府県のデータに10個の説明変数を投入すれば、ほぼ完璧にフィットします(自由度がほぼゼロ)。でもそのモデルを新しい年度に適用すると、予測精度はほぼランダム並みに落ちることがあります。
正しい予測力の評価:
・データを訓練用 70%とテスト用 30%に分割し、テスト用での予測精度を見る
・k分割交差検証(k-fold CV)で予測の安定性を確認
・「説明変数の数 ≪ サンプルサイズ」のバランスを意識(目安:n > 10 × 変数数)
🎯 自分でやってみよう(5つのチャレンジ)
学んだだけでは身につきません。実際に手を動かすのが最強の学習方法です。本論文のスクリプトをベースに、以下のチャレンジに挑戦してみてください。難易度別に5つ用意しました。
★☆☆☆☆ 入門
CH1. 同じデータで分析を再現する
まずは付属の Python スクリプトをそのまま実行し、論文と同じ図を再現してみてください。
ポイント: 各図がどのコード行から生成されているか辿る。エラーが出たら原因を考える。
★★☆☆☆ 初級
CH2. 説明変数を1つ追加・除外して結果を比較
本論文の分析モデルから説明変数を1つ抜いて再実行、あるいは1つ追加して再実行してください。
ポイント: 係数・p値・R² がどう変わったか観察する。多重共線性が原因で結果が変わる例を見つけられたら理想的。
★★★☆☆ 中級
CH3. 別の年度・別の都道府県で同じ分析を試す
SSDSE の別の年度(例:2015年度・2020年度)または特定都道府県のみのデータで同じ分析を実行してください。
ポイント: 時代や地域によって結論が変わるか? 変わるならその理由を考察する。
★★★★☆ 上級
CH4. 別の手法を組み合わせる
本論文の手法 + 1つの追加手法(例:重回帰 + LASSO、相関分析 + 主成分分析)で結果を比較してください。
ポイント: 手法の違いで結論が変わるか? どちらが妥当かを「なぜ」とともに説明できるように。
★★★★★ 発展
CH5. オリジナルの問いを立てて分析する
本論文の手法を借りて、あなた自身の問いを立てて分析してください。
例:「カフェの数と幸福度に関連はあるか」「教育費の高い県は出生率も高いか」など。
ポイント: 問い・データ・手法・結論を1ページのレポートにまとめる。これがデータサイエンスの「実践」。
💡 ヒント: 詰まったら本サイトの他の論文(同じ手法を使っている)のスクリプトをコピーして組み合わせるのが効率的です。手法ガイド・用語集も参考に。
🤔 よくある質問(読者からの想定Q&A)
この論文を読んで初心者が抱きやすい疑問に、教育的観点から答えます。
Q1. この分析、自分でもできますか?
はい、できます。SSDSE データは無料で公開されており、Python の pandas, scikit-learn, statsmodels を使えば全く同じ手順で再現可能です。本ページ下部のスクリプトを実行するだけで結果が得られます。
Q2. 使われている手法は他の分野にも応用できますか?
十分応用可能です。本論文の[手法]は、医療・教育・経済・環境など他のドメインでも標準的に使われる手法です。データの中身(変数)を入れ替えるだけで、別の問いにも適用できます。
Q3. 結論は本当に「因果関係」を示していますか?
本論文は「観察データ」を使った分析であり、厳密な意味での「因果関係」を完全に証明したわけではありません。あくまで「強い関連が見られた」という事実を提示しているにとどまります。真の因果を示すには、無作為化比較試験(RCT)か、自然実験を活用したIV・DiD 等の手法が必要です。
Q4. データの最新版を使うとどうなりますか?
SSDSE は毎年更新されているため、最新版を使えば近年のトレンド(特にコロナ禍以降の変化)も含めて分析できます。ただし、結論が変わる可能性もあります。それ自体が新しい発見につながります。
Q5. もっと深く学ぶには何を読めばいいですか?
「計量経済学」「データサイエンス入門」「統計的因果推論」などのテキストが入門に向いています。Python の場合は『Python ではじめる機械学習』(オライリー)、R の場合は『R で学ぶ統計学』が定番です。本サイトの他の論文も読み比べてみてください。