UX の定量的な計測方法を調べていて、SUS(System Usability Scale) というものを知りました。
10問の固定の質問をスコア化して、定量的にウェブサイトユーザビリティ評価 を行うもので 用途として幅広く使用できそうでしたので、Google スプレッドシートから使う想定で、スコア計算のためのfunction を作成しました。
調べたこと、作成したfunction について記載します。


SUS(System Usability Scale) とは?

以下のスライドの説明がわかりやすかったです。

以下、スライドから SUS の特徴を引用します。

SUSの特徴

  • ジョン・ブルックにより1986年に開発。
  • ユーザビリティの受け止められ方を測定 & 指標化。
  • 10の質問に対して、5段階で評価する。
  • 最終的に0-100 でスコアリング。
  • 質問のテンプレートが公開されている。
  • 幅広いユーザーから聞くことができる。
  • 少ないサンプル数でも信用できる。
  • NPSと高い相関関係がある。

SUS のアンケートの内容

以下の記事にアンケートの内容の日本語訳が記載されています。

SUS のスコアの計算方法

上記の記事から、スコアの計算方法を引用します。

【集計方法】 奇数項目 : 回答番号から1を引く
偶数項目 : 5から回答番号を引く
すべての項目は0から4で評価し、足しあわせた合計数値を2.5倍して0から100のスケールへ変換する。
※質問を見ての通り、奇数項目がポジティブな質問、偶数項目がネガティブな質問となっているため。

標準的な SUS スコアについて

How to Measure Product Usability with the System Usability Scale (SUS) Score
以下のような記載があります。

the standard average of SUS score is 68.

SUSスコアの標準平均は68です。

以下は、記事に記載されているスコアごとのグレートを示す表です。

SUS scoreGradeAdjective Rating
> 80.3AExcellent
68 - 80.3BGood
68COkay
51-68DPoor
< 51EAwful

Google Apps Script の function

Google フォーム のフォーマット

以下のような SUS score を計測するためのGoogle フォームを作成しました。
System Usability Scale Template - Google フォーム

Google Apps Script の function は この Google フォームを エクスポートしてできる Google スプレッドシートに組み込むことを想定しています。

JavaScript function

  • 前提
    Simple Statistics CDN版をGoogle Apps Script 内に 作成して使用しています。
    Google Apps Script の名称は simple-statistics.min.gsして作成しました。

  • main.gs
    以下、作成したスクリプトになります。
    setSUSScore実行すると、SUS スコアを計算して結果をスプレッドシートに設定します。
    setOutfitter実行すると、SUS スコアの4分位範囲を元に外れ値を検出します。

    function setSUSScore() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var lastRow = spreadsheet.getLastRow();
      var range = spreadsheet.getRange(2, 2, lastRow - 1, 10);
      var values = range.getValues();
      var calcResults = calcSUSScore_(values);
      for (var i = 0; i < calcResults.length; i++) {
        var scoreRange = spreadsheet.getRange(2 + i, 12, 1, 1);  
        scoreRange.setValue(calcResults[i]);
      }
    }
    function setOutfitter() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var lastRow = spreadsheet.getLastRow();
      var scoresRange = spreadsheet.getRange(2, 12, lastRow - 1, 1);
      var scores = scoresRange.getValues();
      var results = findOutfitter_(scores);
      for (var i = 0; i < results.length; i++) {
        spreadsheet.getRange(2 + i, 13, 1, 1).setValue(results[i]);
      }
    }
    function calcSUSScore_(values) {
      var calcResults = new Array();
      for (var i = 0; i < values.length; i++) {
        var score = 0;
        for (var j = 0; j < values[i].length; j++) {
          // index が 0 から始まるので、2で割った余りが0の場合は、奇数、1の場合は偶数とする。   
          if(j % 2 == 0) {
            score += values[i][j] - 1;
          } else if (j % 2 == 1) {
            score += 5 - values[i][j];
          } else {
             throw new Error('Illegal argment.');
          }
        }
        calcResults.push(score * 2.5);
      }
      return calcResults;
    }
    function findOutfitter_(scores) {
      var interquartileRange = ss.quantile(scores, 0.75) - ss.quantile(scores, 0.25);
      var min = Number(ss.quantile(scores, 0.25)) - Number(interquartileRange) * 1.5;
      var max = Number(ss.quantile(scores, 0.75)) + Number(interquartileRange) * 1.5;
      var results = new Array();
      for (var i = 0; i < scores.length; i++) {
        var value;
        if (scores[i] < min) {
            value = "Outfitter";
        } else if (scores[i] > max) {
            value = "Outfitter";
        } else {
            value = "";
        }
        results.push(value);
      }
      return results;
    }
    

計算後のスプレッドシートのイメージ

以下のようになります。
黄色がSUSスコア、緑が外れ値で外れ値の場合Outfitterいう文字列が設定されます。
2019-06-27 8.00.29.png - Google ドライブ


参考

以下、参考にした記事になります。

以上です。

コメント