Как стать автором
Обновить

Детерминированный факторный анализ

Время на прочтение4 мин
Количество просмотров13K

Детерминированный факторный анализ - это метод исследования влияния факторов на результативный показатель.

Предполагается, что связь факторов с результативным показателем носит функциональный характер, которая  выражена математической формулой.

Например, выручку логистической компании можно представить так:

Выручка (руб) = Цена (руб/кг) * Объем(кг)

Это мультипликативный вариант модели.

Мы хотим проследить изменение выручки за период: за счет чего изменилась выручка в рублях в отчетном месяце по отношению к предыдущему.

В отчетном месяце:
[B] выручка - 250 руб, [?1] цена - 50 руб/шт, [?1] объем - 5 шт;

в предыдущем месяце:
[A] выручка - 120 руб, [?0] цена - 40 руб/шт, [?0] объем - 3 шт.

Выручка увеличилась на 130 рублей за счет увеличение цены на 10 руб/шт (+25%) и увеличение объема на 2 шт (+66%).
Влияние этих изменений на выручку можно посчитать следующим образом:
Влияние цены: разница цены, умноженная на текущий объем = (50 - 40) * 5 = 50 руб.
Влияние объема = 130 - 50 = 80 руб.

Или посчитаем сначала изменение объема,
Влияние объема: разница объема, умноженная на текущую цену = (5 - 3) * 50 = 100 руб.
Влияние цены = 130 - 100 = 30 руб.

Размер влияния факторов в зависимости от порядка расчета отличается, поэтому этот метод называется цепным (первый вариант - индекс Пааше, второй - Ласпейреса).

Проблему дисбаланса легче проследить на экстремальных задачах:
Например, цена и объем изменились симметрично:
Цена: 10 руб/шт +10% >> 11 руб/шт.
Объем: 10 шт +10% >> 11 шт.
Выручка: 100 руб +21% >> 121 руб.
Логично предполагать, что и изменения цены и объема одинаково повлияли на размер выручки. Посчитаем цепным методом. Влияние объема: (11 - 10) * 10 = 10 руб, влияние цены = 21 - 10 = 11 руб. При одинаковом изменении цены иобъема, влияние цены на изменение выручки на 10% больше, чем влияние объема.

Цена: 10 руб/шт >> 11 руб/шт.
Объем: 10 шт >> 10 000 шт.
Выручка: 100 руб >> 110 000
Влияние цены: (11 - 10) * 10 000 = 10 000 руб - первым способом и (11 - 10) * 10 = 10 руб - вторым.
Влияние объема: (10 000 - 10) * 10 = 99 900 руб - первым способом и (10 000 - 10) * 11 = 109 890 руб - вторым.
Для цены размер влияния на выручку в рублях уже отличается на порядки.

Также при добавления новых показателей в модель, все совместные эффекты влияния будут добавлятся к первому показателю, чтобы этого избежать будем использовать интегральный способ.

Данное изменение можно изобразить прямоугольником:




?0=?0∙?0,
?1=(?1−?0)∙?0,
?2=?0∙(?1−?0),
?3=(?1−?0)∙(?1−?0),
?4=?0+?1+?2+?3=?1∙?1







Изменение выручки:
?4 - ?0 = ?1+?2+?3
Изменение выручки за счет цены:
?1+?3/2
Изменение выручки за счет объема:
?2+?3/2

Изменение выручки: (250 - 120) = 130
Изменение выручки за счет цены: (50 - 40) * 3 + [(50 - 40) * (5 - 3)]/2 = 30 + [10 * 2]/2 = 40
Изменение выручки за счет объема: 40 * (5 - 3) + [(50 - 40) * (5 - 3)]/2 = 80 + [10 * 2]/2 = 90
Проверим: 130 = 40 + 90 (верно).

Выручка в предыдущем месяце составляла 120 руб. Уменьшение цены на 10 руб/шт увеличило выручку на 40 рублей, при этом увеличение объема на 2 шт. увеличило выручку на 90 руб. Выручка в текущем месяце – 250 руб.

Для двумерного случая можно использовать данные формулы, но с увеличением размерности модели, подобрать формулы становится проблематично. Автоматизируем данный процесс.

Допустим, что наша модель усложнилась и теперь:

Выручка(руб)=Цена(руб/кг)*Вес(кг/шт)*Объем(шт)

В отчетном месяце:
[B] выручка - 250 руб, [?1] цена - 5 руб/кг, [?1] объем - 5 шт, [?1] вес - 10 кг/шт;
в предыдущем месяце:
[A] выручка - 96 руб, [?0] цена - 4 руб/шт, [?0] объем - 3 шт [?2] вес - 8 кг/шт.

Так как система имеет два состояния A и B, то фигуру необходимо разбить на 2? частей, где ? – количество измерений.
Так для 3 измерений необходимо 23 = 8 частей.

Изменение выручки за счет цены-и-объема необходимо поделить пополам,
также необходимо поделить пополам изменение выручки за счет цены-и-веса и веса-и-объема.

Изменение выручки за счет цены-веса-и-объема необходимо разделить на 3 части:

Составим таблицу, ? - цена, ? - вес, ? - объем:


Где Δ?=(?1−?0),
Δ?=(?1−?0),
Δ?=(?1−?0),
1 – наличие Δ.
Дельта (Δ) показывает за счет какого фактора происходит изменение.

Кол-во Δ в строке показывает на сколько частей необходимо делить фигуру, для этого необходимо вывести дополнительный столбец с количеством Δ (?Δ).

Суммы по столбцу ??, ??, ?? – это значение влияния фактора.
В итоге: A → ?0+??+??+?? = B

Для нашего примера:
Выручка в предыдущем месяце составляла 120 руб. Увеличение цены на 1 руб/кг увеличило выручку на 36,3 руб, при этом увеличение веса на 2 кг/шт. увеличило выручку на 36,3 руб., также увеличение объема на 2 шт. увеличило выручку на 81,3 руб. Выручка в текущем месяце – 250 руб.

Теперь код:

import numpy as np

from typing import *
from itertools import *


def factors_product(beg: List, end: List) -> List:

    beg = np.array(beg)
    end = np.array(end)
    # (1) генерируем матрицу наличия Δ, (0, 0, 0) нам не нужна
    sep = np.array(list(product([0, 1], repeat=len(beg))))[1:]
    # (2) рассчитываем матрицу отклонений факторов + матрица начальных значений
    delta = sep * (end-beg) + beg * (1-sep)
    # (3) найдем ?Δ
    k = sep.sum(1)
    # (4) найдем произведение состояния факторов / ?Δ
    m = (sep * (end-beg) + beg * (1-sep)).prod(1) / k
    # (4) поместим m на соответствующие факторы и посчитаем суммы влияния
    result = (sep.T * m).sum(1)
    return result

Или return в одну строку:

def factors_product(beg: List, end: List) -> List:

    beg = np.array(beg)
    end = np.array(end)
    sep = np.array(list(product([0, 1], repeat=len(beg))))[1:]

    return (sep.T*((sep*(end-beg)+beg*(1-sep)).prod(1)/sep.sum(1))).sum(1)
# проверим нашу задачу
# установим библиотеку
!pip install detfa

from detfa import factors_product

print(factors_product([4,3,8], [5,5,10]))
>> [36.33333333 81.33333333 36.33333333]

PyPI: https://pypi.org/project/detfa/

Теги:
Хабы:
Всего голосов 1: ↑1 и ↓0+1
Комментарии4

Публикации

Истории

Работа

Data Scientist
46 вакансий

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область