Help us understand the problem. What is going on with this article?

拝啓、その平均って何の平均ですか…〜Tableau編〜

はじめに

Tableauは便利なBIツールですが、その便利さゆえに、引き起こしてしまっている問題について。自分への自戒をこめたメモ。

問題

とあるお客様に、過去にTableauを提案した経緯があるようで、Tableauの使い方の相談が来ました。問題はもう少し複雑だったのですが、問題の根底にある部分にフォーカスすると、Tableauの計算がおかしい、平均の計算が間違っている。どうすれば正しい計算ができるのか。というお問い合わせ。

データ

データ(実際にもっとビックなビックなデータ)は、簡単にするとこんな感じ。よくある履歴データベースのデータ構造。

ID value
X001 100
X001 100
X001 100
X001 100
X001 100

これの平均を計算したい。だから、Tableauで、valueをフィールドに持っていって、プルダウンから「平均」を選択したらこうなった。なんで、100になるのか。これは500ではないか。平均が計算できないということ。

スクリーンショット 0031-04-13 12.24.23.png

わからなくもない。お気持ちを察するに、IDはユニークで「1個」なので、valueの合計は500なので、平均は(100+100+100+100+100)/1=500になるはずでは・・・?ということらしい。

平均の定義

平均の定義から考えてみる。定義は下記の通り。

\overline { x } =\frac { 1 }{ n } \sum _{ i=1 }^{ n }{ { x }_{ i } } 

なんてことない式だと思う。iの個数分、xを足して、iの個数分で割ることで計算される。Tableauで100が表示されているということは、どのように計算されているかを考えると、(100+100+100+100+100)/5=100となっているはず。つまり、分母のnは5である。このn=5はどこから来ているかを考えると、これはレコード数である。(Tableauの人、違ってたらごめんなさい)

つまり、valueの値を合計して、レコード数で割ることで、平均を計算していると考えられる。なので、平均の関数を使うと、こんな感じで計算している。

COUNT(Records) SUM(value) 平均
5 500 100

お気持ちを察するためには、平均のためのこの中間テーブルはこうでないといけない。

COUNT(Records) SUM(value) 平均
1 500 500

そのようにするためには、ID単位でまとめればいい。SQLやRではGROUP BY / group_by()を実現できる。Tbaleauでは{FIXED hoge:hoge()}で実現できる(まぁ、このFIXEDがコンテキストフィルタと絡まることで、面倒を引き起こすことにはここでは触れない)。この状態であれば、平均を計算しても、500/1=500となる。

スクリーンショット 0031-04-13 12.49.36.png

今回の例であれば、Tableauでいうとことの集計をしてしまいSUM(value)/COUNTD(ID)なんかでもいいかもしれない。

まとめ

BIツールは手軽に集計や可視化ができる優れものです。しかし、手軽すぎる故に、その関数がどう計算されるのか、データ構造がどうなっているか…今回の問題が、これらを考えないことで引き起こされた問題かと思います。

下記のような言葉あるように、人間のお気持ちを察して、計算してくれません。

Any code doesn't run as you thought, run as it wrote

書かれたようにしか動かない。ということは、Tableauの場合、オープンソースではないので、どう書かれているは調べられませんが、どう計算されるのかは試せばわかる。手軽すぎる故に、データがどのような構造になっていて、何を計算したいのか(今回でいうと分母は何)を考えることをやめてませんか…。

たまに正しい計算はどちらですか?ということを尋ねられますが、「正しい」ってなんでしょうか。何をもって「正しい」のでしょうか。数学的には、今回の例はどちらも「正しい」でしょう。レコード単位なのか、ID単位なのかの違いなので。ビジネスの問題に答えはあってないようなものなので、そもそも「何が正しい」のかは、自分で決める必要があるかと思います…お気持ちを察するに、ID単位なのであれば「正しくない」。

今回のように非常な簡単な状態に落とし込んで考えているので、「こんなことはありえない」「すぐ気づくだろう」と思った方もいるとは思いますが、実際の現場では、ビックなデータを使いつつ、何枚もダッシュボードを作ったりしていると、注意が散漫になることもあると思います…。

履歴データ、ウェブログデータなどのデータ、手軽に平均を計算してませんか…気をつかないといけない(自戒)。そして、こんなこと書いてて内容間違ってたらごめんなさい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away