データ駆動型のプログラミング教育

消費情報環境法学科所属 太田 和俊

私が消費情報環境法学科に着任したのが、2009年4月になります。ちょうど学科開設から10周年を迎えるあたりのことで、学科のカリキュラム内容もほぼ定まっている印象でした。私の専門は理論物理の研究なので、主な担当科目は共通科目の物理学になりますが、学科の科目としては情報処理を担当しています。

法学部所属の教員は基本的に3年次対象の演習(ゼミ)を担当することになっていますが、ずっと理系畑を歩んできたので、文系の法学部生に対して、どのようなゼミを行えば良いのか思いつかず、しばらくゼミの担当は免除していただいていました。前任校(東北大学)では、研究室所属の学生のゼミを担当したこともあったのですが、内容は物理の専門書の文献購読だったので、同様のものをそのまま文系の学生に行うわけにもいかず、悩んだのを覚えています。

講義での情報処理の授業を担当しながら、文系の学生の理解度や知識を確認し、法学部生でも役に立つような内容を、色々と考えてまいりました。当初は、データベースやウェブの検索エンジンのアルゴリズムなどを対象にしようかと考えておりましたが、適用範囲が専門的すぎて限られており、一般的な学生向けではないと断念しました。

そんな中、データサイエンスや機械学習、深層学習といった分野が急速に広まり、いろいろな局面で見かけるようになりました。個人的、および研究上の興味があり、自分でもいろいろな本や文献で調べて見たところ、これらの注目されつつある分野は全て、数理科学分野を中心に進展してきた高度な統計学を基礎としており、数学や物理学の研究者にとってはとても馴染み深いものでした。特に、近年の人工知能(AI)に用いられているアルゴリズムは統計物理学や格子ゲージ理論など、離散的なものを対象としている物理現象の研究や考え方を基としているものが多数あり、私を含めた物理学者にとってはすんなりと理解できるものになっています。

統計学を基礎としたデータの読み取り方、ものの考え方は、これからは人文・社会科学の分野でもますます一般的になってくると予想され、文系の学生であってもこれらの基礎を学ぶことは重要だと考えるようになりました。ただ、やはり文系の初学者にとっては数理統計学的な切り口から入るのはなかなか難しく、ユーザー的な観点で、既存の理論をどのように活用するかを主眼において学ぶ必要があります。そんな中、プログラミングやアルゴリズムの学習という観点から、データの解析や可視化の手法を統計学を軸として学んでいく方向でカリキュラム構築を考え始めました。

データサイエンスや機械学習などの分野では、その分析やアルゴリズムの実装のためのツールとしてPythonと呼ばれるプログラミング言語がよく用いられています。Pythonもデータサイエンス分野に興味を持ってから勉強を始めたのですが、基本的なプログラミング言語を知っていれば、習得もさほど難しくありませんでした。Pythonについて学ぶにつれ、このプログラミング言語は、文系の学生を含むプログラミング初学者にとっては最適なものでは無いかと思うようになりました。そういった経緯もあり、今の担当しているゼミでは、Pythonを用いたプログラミングの基礎から始まり、データサイエンスの基本から数理的・論理的な思考が養えるような指導を行なっています。

ここで、Pythonというプログラミング言語の特徴について紹介します。Pythonはインタープリタ型と呼ばれるプログラミング言語で、記述したプログラムを動作させるためのコンパイルと呼ばれる作業を必要としません。また、Jupyter Notebookと呼ばれるものを用いて、インタラクティブ(対話的)にプログラミングと実行を行うことができるので、試行錯誤を繰り返しながらプログラムやアルゴリズムを理解していくのに向いています。この辺りは、文系の世界でもよく使われてきたRというプログラミング言語にも近いですが、統計学にやや特化したRよりもPythonの方が汎用性がより高いのでは無いかと思います。

また、Pythonの文法(仕様)も自由度が高く、特に変数の型や配列(リスト)のサイズをあまり気にせずプログラミングすることができます。特に、C言語のポインタやアドレス空間の概念のように面倒な部分がなく、行列のような構造を持った配列を扱うことが簡単で、統計学や線形代数といった数学上の概念やアルゴリズムをプログラミングしやすい設計となっています。この辺りがデータサイエンスや機械学習分野で多く使われる最大の理由でしょう。

一方で、簡単なプログラミング言語であることの裏返しとして、変数の型宣言のゆるさなど、少し自由度が高すぎる側面もあり、ちょっとしたバグが見つけにくいことも起こります。また、条件分岐やループのブロック構造をインデントで指定するため、後からブロックの一部をまとめてネストしたい場合にはやや面倒です。(ただし、インデントによるブロック構造の指定は、プログラミングコードの見た目が誰が書いても同じようなものになるという利点として捉えることもあります。)

私のゼミでは、このPythonを使って統計学を含めデータサイエンスの基礎的な内容を行なっているのですが、プログラミング自体(文法)については文系の学生であっても特に問題なく習得できるようです。しかし、実際のアルゴリズムを実装したり、データ解析結果の解釈を行うような場合には、数学的素養がやや足りないように感じています。

学生に話を聞くと、全ての学校では無いのでしょうが、文系の学生に対する高校での数学教育は、だいぶ手が抜かれているように感じます。特に、データサイエンス分野を学ぶ上で重要な統計学やデータ解析手法についての学習はカリキュラム上省略されることも多いようです。データ分析や社会統計といった分野は、経済・経営学や政策決定のための法学分野も含めて多くの重要な内容を含んでいると思うのですが、日本の社会において、文系の学生には数学が不要といった考え方が根強くあるように感じます。

公的な機関や民間企業においても、データ分析や事前のシミュレーションなしに、根拠のない直感や感覚に従い、とりあえず実行した後で精神論や責任回避でごまかす、といったことが長い間行われてきました。(自然科学の分野でもデータの改竄や不正といった問題は皆無では無いので、あまり一方的な批判はできませんが・・。) 最近でも、厚労省が作成する統計で不正が行われたり、財務省の決済文書の改竄されたりなど、今の政府自体がデータや記録・証拠をとても軽く扱っており、(政治判断という名の)感性のみで政策決定がなされることを我々は多く経験してきましたので、社会全体や教育レベルでデータ駆動型(Data Driven)思考の重要性を認識するというのは、なかなか困難なのかもしれません。

この辺り、社会全体、日本の教育全体に深く根差した問題なのかもしれませんが、データや統計に基づいた理性的な考え方や判断基準が習得できるよう、少なくとも私のゼミ生には今後も指導を行なっていきたいと考えています。