استمرار درآمدزایی یکی از دغدغههایی است که استودیوهای بازی سازی دارند. خصوصا اگر شیوهی این درآمدزایی Freemium باشد. چرا که باید همواره معیارهایی از قبیل نرخ فعالسازی، نرخ بازگشت و متوسط مقدار خرید را مورد بررسی قرار دهند و در جهت بهبود آنها حرکت کنند. اگرچه جهت این حرکت مشخص است، اما دانستن جایگاه خودشان در این صنعت از طریق این معیارها کمک میکند تا به طور بهینه از منابع در اختیارشان استفاده کنند.
امسال کافهبازار گزارش جالبی از نحوه درآمدزایی و مقایسه معیارهای آن در بازیهای ایرانی و خارجی منتشر کرده است. از این گزارش برای محک زدن خودمان استفاده کردیم تا ببینیم اصطلاحا ما کجای کار هستیم و چه جاهایی باید بیشتر تلاش کنیم. همانطور که حتما میدانید، استودیو تاد در حال حاضر دو بازی فروتکرفت و پرسیتی را با سبک کارتی و شهرسازی در کارنامه خود دارد. در این نوشته قرار است معیارهای درآمدزایی این دو بازی را با توجه به گزارش کافه بازار بررسی کنیم.
ارزش خریدار در طول زمان
اولین معیار مورد بررسی، نشان میدهد که تعداد خریداران بازیهای ایرانی بیشتر از بازیهای خارجی است ولی به لحاظ درآمدی در یک رده قرار دارند. این یعنی در طول زمان، بازیکنهای بازیهای خارجی متوسط خرید بیشتری دارند. این اتفاق احتمالا ناشی از این است که در بازیهای خارجی محتوای بازی برای بازیکنها، نه به صورت یکجا بلکه در طول زمان ارائه میگردد. همین امر باعث میشود بازیکنهای کم حوصله، برای دسترسی زودتر به محتوا، اقدام به خرید کنند. البته حتما این اتفاق دلایلی دیگری هم دارد که به سبک و نوع بازی مرتبط است. رصد این معیار در طول زمان به سازنده کمک میکند تا به ابعاد مختلف آن بیاندیشد.
خُب، دستکشهای کارمان را دستمان کنیم و ببینیم ما در چه وضعیتی هستیم!
برای محاسبه این معیار ابتدا باید عمر خرید هر بازیکن نسبت به اولین خرید خودش را بدست بیاوریم. اولین خرید بازیکن که راحت بدست میآید:
SELECT
    t.PlayerID,
    min(t.CreationDate) AS AgeZero
FROM
    Transactions AS t 
GROUP BY
    t.PlayerID
حالا بقیه خریدها را با این خرید مقایسه میکنیم و عمر همه تراکنشها را بدست میآوریم:
CREATE VIEW TransactionsOnlyFirst AS
SELECT
    t.*,
    min(t.CreationDate) AS AgeZero
FROM
    Transactions AS t 
GROUP BY
    t.PlayerID
SELECT
    t.ID,
    t.PlayerID,
    floor((t.CreationDate - tof.AgeZero) / (24*3600)) AS Age
FROM
    Transactions AS t 
JOIN
    TransactionsOnlyFirst AS tof
ON
    t.PlayerID = tof.PlayerID
کافه بازار برای محاسبهی متوسط تعداد خرید بعد از اولین خرید بازههای ۱، ۳، ۷، ۱۴، ۳۰، ۶۰، ۱۲۰، ۱۵۰ و ۱۸۰ روزه را انتخاب کرده است. برای اینکار ابتدا مجموع تعداد خرید هر بازیکن و سپس متوسط آنها را در این بازهها حساب میکنیم:
CREATE VIEW TransactionsWithAge AS
SELECT
    t.*,
    floor((t.CreationDate - tof.AgeZero) / (24*3600)) AS Age
FROM
    Transactions AS t 
JOIN
    TransactionsOnlyFirst AS tof
ON
    t.PlayerID = tof.PlayerID
CREATE PROCEDURE PlayersAvgTrCount
(
    IN DaysPastFirstTransaction INT,
    OUT AvgTransactionCount DOUBLE
) 
BEGIN
    SELECT
        avg(dummy.TotalTransactionCount) INTO AvgTransactionCount
    FROM
    (
        SELECT
            twg.PlayerID,
            count(1) AS TotalTransactionCount
        FROM
            TransactionsWithAge AS twg
        WHERE
            twg.Age < DaysPastFirstTransaction 
        GROUP BY
            twg.PlayerID
    ) AS dummy;
END
CREATE PROCEDURE CalcPlayersAvgTrCount() 
BEGIN
    SET @i : = 1;
    WHILE @i <= 10 DO 
        SET @day_string = elt(@i, '1', '3', '7', '14', '30', '60', '90', '120', '150', '180');
        SET @day = cast(@day_string AS UNSIGNED);
        CALL PlayersAvgTrCount(@day, @atc);
        SET @query = concat
        (
            'SELECT "', @day_string, '" AS DaysPastFirstTransaction,',
            IF(@atc = NULL, 0, @atc), ' AS AvgTransactionCount'
        );
        IF @i = 1 THEN
            SET @allquery : = @query;
        ELSE
            SET @allquery : = concat(@allquery, ' UNION ', @query);
        END IF;
        SET @i = @i + 1;
    END WHILE;
    PREPARE Statement FROM @allquery;
    EXECUTE Statement;
END
دادههای هر دو بازی را بررسی کردیم و در نهایت با توجه به خروجی به دست آمده نمودار زیر را رسم کردیم:
 از مقایسه نتیجه با نمودارهای گزارش اصلی نتیجه میگیریم که هر دو بازی در رده بازیهای عالی ایرانی هستند.
از مقایسه نتیجه با نمودارهای گزارش اصلی نتیجه میگیریم که هر دو بازی در رده بازیهای عالی ایرانی هستند.
این نمودار نشان میدهد که ارزش خریداران این دو بازی با هم فرق دارد. وضعیت فروتکرفت بهتر از پرسیتی است. البته این تفاوت لزوما خبر خوب یا بدی نیست. تفاوتهای زیادی میان پرسیتی و فروتکرفت وجود دارد. تفاوت در سبک، عمر بازی، جامعه هدف و … که هر کدام تاثیر متفاوتی بر این معیار دارند. شاید اگر کافه بازار گزارشی به تفکیک سبک بازیها منتشر کند بتوانیم تحلیل بهتری داشته باشیم.
نرخ تکرار خرید
این معیار انگیزهی خریدار برای خرید دوباره را نشان میدهد. طبق گزارش، انگیزهی بازیکنها در بازیهای خارجی برای خرید دوباره تا ۶۰ روز بعد از اولین خریدشان افزایشی است. این در حالی است که بازیکنهای بازیهای ایرانی بعد از ۳۰ روز انگیزهی خود را برای خرید مجدد از دست میدهند. احتمالا این اتفاق ناشی از پایینتر بودن نرخ بازگشت به بازی یا اصطلاحا ماندگاری بازیکنها در بازیهای ایرانی نسبت به بازیهای خارجی باشد. به نظر میرسد وجود سازوکارهایی مانند جوایز روزانه، چالشهای روزانه و به طور کلی هر فرآیندی که به بازیکن انگیزه بازگشت مجدد به بازی بدهد نرخ تکرار خرید را هم افزایش خواهد داد.
برای محاسبه این معیار هم نیاز به حساب کردن عمر هر تراکنش داریم. بعد از آن باید تعداد خریدارها را در هر طول عمر بشماریم. مثلا تعداد کل افرادی که تراکنشی با عمر ۱ دارند، با عمر ۲ دارند و همین طور الی آخر. در گزارش کافه بازار نرخ تکرار خرید به صورت تجمعی محاسبه شده است. یعنی مثلا نرخ تکرار خرید در روز ۳۰ ام از حاصل تقسیم مجموع تعداد افراد خریداری که دارای تراکنشی با عمر ۱۵ تا ۳۰ روز هستند بر مجموع تعداد افراد خریدار بدست آمده است. به این شکل:
CREATE PROCEDURE TransactionRetention
(
    IN StartAge INT,
    IN EndAge INT,
    OUT TotalPaidPlayerCount INT
) 
BEGIN
    SELECT
        sum(dummy.PaidPlayerCount) INTO TotalPaidPlayerCount 
    FROM
    (
        SELECT
            twg.Age,
            count(DISTINCT twg.PlayerID) AS PaidPlayerCount 
        FROM
            TransactionsWithAge AS twg
        GROUP BY
            twg.Age
    ) AS dummy
    WHERE
        dummy.Age >= StartAge AND dummy.Age <= EndAge;
END
CREATE PROCEDURE CalcTransactionRetention() 
BEGIN
    SET @i : = 1;
    SET @TotalPaidPlayers : = 0;
    WHILE @i <= 11 DO 
        SET @prev_day : = @i - 1;
        IF @i > 2 THEN
            SET @day_string = elt(@i - 1, '0', '1', '3', '7', '14', '30', '60', '90', '120', '150', '180');
            SET @prev_day = cast(@day_string AS UNSIGNED);
            SET @prev_day = @prev_day + 1;
        END IF;
        SET @day_string = elt(@i, '0', '1', '3', '7', '14', '30', '60', '90', '120', '150', '180');
        SET @day = cast(@day_string AS UNSIGNED);
        CALL TransactionRetention(@prev_day, @day, @pc);
        IF @i = 1 THEN
            SET @TotalPaidPlayers : = IF(@pc = NULL, 0, @pc);
        ELSE
            SET @PaidPlayerRate : = @pc*100 / @TotalPaidPlayers;
            SET @query = concat
            (
                'SELECT "', @day_string, '" AS DaysPastFirstTransaction,',
                IF(@PaidPlayerRate = NULL, 0, @PaidPlayerRate), ' AS PaidPlayerRate'
            );
            IF @i = 2 THEN
                SET @allquery : = @query;
            ELSE
                SET @allquery : = concat(@allquery, ' UNION ', @query);
            END IF;
        END IF;
        SET @i = @i + 1;
    END WHILE;
    PREPARE Statement FROM @allquery;
    EXECUTE Statement;
END
نمودار حاصل از دادههای هر دو بازی را اینطور رسم کردیم:
 از مقایسه این نمودار با گزارش کافه بازار متوجه میشویم که فروتکرفت در رده بازیهای عالی ایرانی و پرسیتی در بین بازیهای عالی خارجی است. همانطور که مشخص است بازیکنهای فروتکرفت از روز ۳۰ ام به بعد انگیزه خود را برای خرید مجدد از دست میدهند و بازیکنهای پرسیتی تا روز ۶۰ ام همچنان متمایل به خرید مجدد هستند.
از مقایسه این نمودار با گزارش کافه بازار متوجه میشویم که فروتکرفت در رده بازیهای عالی ایرانی و پرسیتی در بین بازیهای عالی خارجی است. همانطور که مشخص است بازیکنهای فروتکرفت از روز ۳۰ ام به بعد انگیزه خود را برای خرید مجدد از دست میدهند و بازیکنهای پرسیتی تا روز ۶۰ ام همچنان متمایل به خرید مجدد هستند.
در انتها از شما دعوت میکنیم تا اگر بازی ساز هستید، این معیارها را برای بازی خود محاسبه و منتشر کنید تا بتوانیم دادههای بیشتری برای محکزنی در سبکهای مختلف این صنعت بدست بیاوریم.
 
				