Math.randomで顧客エンゲージメントを最大化!GASマーケティング活用術

Math.randomで顧客エンゲージメントを最大化!GASマーケティング活用術

マーケティング担当者の皆さん、顧客データの分析やキャンペーンの最適化に日々頭を悩ませていませんか? Google Apps Script(GAS)のMath.random()関数を活用することで、顧客管理、キャンペーン管理、分析といったマーケティング業務を劇的に改善できます。本記事では、Math.random()の基本から、マーケティングにおける具体的な活用例、よくある問題とその解決策、さらにはカスタマイズ方法まで、詳しく解説します。

Math.random()関数の基本

Math.random()は、0以上1未満の浮動小数点数を疑似乱数として生成するJavaScriptの組み込み関数です。GASはJavaScriptをベースとしているため、この関数をそのまま利用できます。マーケティングにおいては、この乱数を活用することで、データのランダムサンプリング、A/Bテストの対象者選定、キャンペーンの抽選など、さまざまな場面で役立ちます。

Math.random()の構文

Math.random();

引数は不要で、実行するたびに異なる乱数が生成されます。

マーケティングにおけるMath.random()の実装例

マーケティングの様々なシチュエーションでMath.random()を活用することで、業務効率化や効果測定の精度向上が期待できます。ここでは、具体的な実装例をいくつかご紹介します。

顧客セグメントのランダム抽出

大規模な顧客リストから、ランダムに特定の割合の顧客を抽出したい場合に便利です。例えば、新商品のプロモーションを行う際に、テストマーケティングの対象者を無作為に選び出すことができます。

// スプレッドシートから顧客リストを取得し、指定割合の顧客をランダムに抽出する関数
function getRandomCustomerSegment(sheetName, percentage) {
// スプレッドシートを開く
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetName);

// 顧客データを取得(A列から最終行までを想定)
const data = sheet.getRange("A1:A" + sheet.getLastRow()).getValues().flat();

// 抽出する顧客数
const numberOfCustomersToExtract = Math.floor(data.length * (percentage / 100));

// ランダムに顧客を抽出
const randomCustomers = [];
const selectedIndices = new Set(); // 重複を防ぐためのSet

while (randomCustomers.length < numberOfCustomersToExtract) {
const randomIndex = Math.floor(Math.random() * data.length);
if (!selectedIndices.has(randomIndex)) {
randomCustomers.push(data[randomIndex]);
selectedIndices.add(randomIndex);
}
}

return randomCustomers;
}

// 使用例:
function example() {
const sheetName = "顧客リスト"; // スプレッドシート名
const percentage = 10; // 抽出する割合(%)
const randomSegment = getRandomCustomerSegment(sheetName, percentage);
Logger.log(randomSegment);
}

A/Bテストの対象者選定

Webサイトやメールマガジンのデザイン、コピーなどを変更し、どちらがより効果的かを検証するA/Bテストにおいて、テスト対象者を公平に選定するためにMath.random()が役立ちます。

// A/Bテストの対象者をランダムに割り当てる関数
function assignABTestGroup(userListSheetName, groupAOutputSheetName, groupBOutputSheetName, percentageForA) {
// スプレッドシートを開く
const ss = SpreadsheetApp.getActiveSpreadsheet();
const userListSheet = ss.getSheetByName(userListSheetName);
const groupAOutputSheet = ss.getSheetByName(groupAOutputSheetName);
const groupBOutputSheet = ss.getSheetByName(groupBOutputSheetName);

// ユーザーリストを取得
const userList = userListSheet.getDataRange().getValues();

// ヘッダー行をスキップ
const headerRow = userList.shift();

// 各ユーザーをA/Bグループにランダムに割り当てる
userList.forEach(user => {
if (Math.random() < (percentageForA / 100)) {
// Aグループ
groupAOutputSheet.appendRow(user);
} else {
// Bグループ
groupBOutputSheet.appendRow(user);
}
});
groupAOutputSheet.insertRowBefore(1).getCell(1,1).setValue(headerRow[0]);
groupBOutputSheet.insertRowBefore(1).getCell(1,1).setValue(headerRow[0]);
}

// 使用例
function exampleAB() {
const userListSheetName = "ユーザーリスト"; // ユーザーリストが記載されたシート名
const groupAOutputSheetName = "Aグループ"; // Aグループの出力先シート名
const groupBOutputSheetName = "Bグループ"; // Bグループの出力先シート名
const percentageForA = 50; // Aグループに割り当てる割合(%)

assignABTestGroup(userListSheetName, groupAOutputSheetName, groupBOutputSheetName, percentageForA);
}

キャンペーンの抽選

キャンペーンの当選者をランダムに決定する際に、Math.random()を利用できます。公平性を担保し、参加者の信頼を得ることができます。

// スプレッドシートから応募者リストを取得し、当選者をランダムに選出する関数
function drawWinners(sheetName, numberOfWinners) {
// スプレッドシートを開く
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetName);

// 応募者データを取得(A列から最終行までを想定)
const applicants = sheet.getRange("A1:A" + sheet.getLastRow()).getValues().flat();

// 応募者が当選者数より少ない場合はエラー
if (applicants.length < numberOfWinners) {
throw new Error("応募者数が当選者数より少ないです。");
}

// 当選者をランダムに選出
const winners = [];
const selectedIndices = new Set(); // 重複を防ぐためのSet

while (winners.length < numberOfWinners) {
const randomIndex = Math.floor(Math.random() * applicants.length);
if (!selectedIndices.has(randomIndex)) {
winners.push(applicants[randomIndex]);
selectedIndices.add(randomIndex);
}
}

return winners;
}

// 使用例:
function exampleDraw() {
const sheetName = "応募者リスト"; // スプレッドシート名
const numberOfWinners = 3; // 当選者数
const winners = drawWinners(sheetName, numberOfWinners);
Logger.log(winners);
}

よくある問題とトラブルシューティング

乱数の偏り

Math.random()は疑似乱数生成器であるため、完全にランダムな数値を生成するわけではありません。しかし、通常の使用においては問題となるほどの偏りは生じません。もし、より高度な乱数が必要な場合は、他の乱数生成アルゴリズムを検討する必要があります。

重複の回避

ランダムな要素の抽出において、重複を避けたい場合があります。上記のコード例では、Setオブジェクトを使用して、重複を排除しています。

カスタマイズ方法と応用例

乱数の範囲指定

Math.random()は0以上1未満の数値を生成しますが、必要な範囲の乱数を生成するために、以下の式を利用できます。

Math.floor(Math.random() * (max - min + 1)) + min;

この式を使うことで、min以上max以下の整数乱数を生成できます。

シード値の設定

Math.random()はシード値を設定できないため、毎回異なる乱数が生成されます。しかし、特定の条件下で同じ乱数列を再現したい場合は、独自の乱数生成アルゴリズムを実装する必要があります。

まとめ

Math.random()は、GASを利用したマーケティングにおいて、非常に強力なツールとなります。顧客データのランダムサンプリング、A/Bテスト、キャンペーンの抽選など、様々な場面で活用することで、業務効率化と効果測定の精度向上に貢献します。本記事で紹介したコード例を参考に、ぜひMath.random()をマーケティング活動に取り入れてみてください。

PR

未経験からSNSデザインを学び、在宅ワークで収入を得たい方へ。
Flap DESIGNは、デザインスキルから案件獲得までを徹底サポートするオンラインスクールです。現役プロがマンツーマンで指導するため、挫折しにくい環境が強み。
さらに、受講期間中に案件を獲得できなかった場合は、売上が立つまで営業サポート期間を延長する「売上保証制度」も魅力です。
副業として月8〜20万円を目指したい会社員の方、出産・育児を機に新しい働き方を求める方、フリーランスとして独立を目指す方など、ライフスタイルに合わせた働き方を実現したい方にぴったりのサービスです。まずは無料相談で詳細を聞いてみませんか?

未経験から始める!SNSデザインスクール