Материал: Разработка полноценной методологии для прогнозирования товарооборота в торговом объекте

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Дальнейшее улучшение созданной методологии может проводиться по ряду направлений:

·        увеличение числа объектов, для которых доступна информация, на основе которой может проводиться прогнозирование: точность регрессионных моделей, как правило, возрастает с ростом числа наблюдений, а наличие сведений об абсолютных величинах товарооборотов для значительного числа объектов даст возможность осуществления калибровки остальных моделей;

·        получение более детальной информации об арендаторах торговых центров, а также о наиболее крупных объектах, работающих в исследуемых товарных категориях, что дало бы возможность проводить более гибкую оценку положения на рынке того или иного ТЦ;

·        расширение имеющихся сведений о характеристиках объектов, которое позволило бы более точно оценивать их привлекательность для посетителей, а, следовательно, и занимаемую ими долю рынка; общая арендуемая площадь, безусловно, оказывает влияние на итоговую величину товарооборота, однако было бы целесообразно рассмотреть и иные факторы, вроде расположения относительно транспортных путей, числа парковочных мест или наличия иных предоставляемых дополнительно услуг;

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

Литература

1.      Структура ВВП России // www.newsruss.ru - http://newsruss.ru/doc/index.php/Структура_ВВП_России

.        http://tass.ru/ekonomika/1728983

.        Рынок торговой недвижимости // Knight Frank. Москва, 2014.

.        Лазаренко А. А. Методы оценки конкурентоспособности [Текст] / А. А. Лазаренко // Молодой ученый. - 2014. - №1. - С. 374-377.

.        Павлова Н. Н. Маркетинговый подход к оценке конкурентоспособности магазина (сервиса) // "Маркетинг в России и за рубежом" - 2005 - №1.

6.      David L. Huff. Parameter Estimation in the Huff Model // ArcUser, October - December, 2003 - esri.com

7.      Российский статистический ежегодник - 2013 г. // Федеральная служба государственной статистики, 2013.

.        Административные округа и районы Москвы // портал «Электронная Москва» - http://mosopen.ru/regions.

.        Хортонен А. А. Географические информационные системы как класс систем поддержки принятия решений при управлении пространственность информацией (на примере банковской сферы) // Вестник Астраханского государственного технического университета. Серия: Управление, вычислительная техника и информатика - 2011 - №1.

.        Зборовский Р.Д., Сидоренко В. И., Солдатов Г. И. Рынок торговой недвижимости. Модель расчета товарооборота торговых центров // НИУ ВШЭ, 2014.

.        Вычисление расстояния и начального азимута между двумя точками на сфере // www.gis-lab.info - http://gis-lab.info/qa/great-circles.html

.        Численность постоянного населения на 1 января // Единая межведомственная информационно-статистическая система - http://www.fedstat.ru/indicator/data.do?id=31557

.        Предположительная численность населения Российской Федерации до 2030 года (статистический бюллетень) // Федеральная служба государственной статистики. Москва, 2013.

.        Розничная торговля и услуги населению // Федеральная служба государственной статистики

.        Рынок общественного питания // Intesco Research Group. Москва, 2014.

.        Обзор российского кинорынка. Итоги 2012 года // Невафильм Research. Санкт-Петербуг, апрель 2013.

.        Прогноз долгосрочного социально-экономического развития РФ до 2030 года // Минэкономразвития России.

Приложение 1

Исходный код написанных для методологии макросов

Блок общего назначения

'получение тела таблицы

Function GetTable(tableName)= ThisWorkbook.Sheets("Справочные_данные").ListObjects(tableName).DataBodyRange.ValueFunctionGetTable2(sheet, colStart, rowStart, colEnd)= ThisWorkbook.Sheets(sheet).Range(colStart & Rows.Count).End(xlUp).Row= ThisWorkbook.Sheets(sheet).Range(colStart & rowStart & ":" & colEnd & rowEnd)Function

'очистка листаClearSheet(sheetname As String)(sheetname).Cells.ClearSub

'расчет расстояния меджу объектом и р-ном по формуле гаверсинусов

'координаты - десятичные, расст. в кмGetDistance(objLat, objLong, areaLat, areaLong)Application.WorksheetFunction= .Atan2(Sin(.Pi() * objLat / 180) * Sin(.Pi() * areaLat / 180) + Cos(.Pi() * objLat / 180) * _(.Pi() * areaLat / 180) * Cos(Abs(.Pi() * areaLong / 180 - .Pi() * objLong / 180)), _

((Cos(.Pi() * areaLat / 180) * Sin(.Pi() * areaLong / 180 - .Pi() * objLong / 180)) ^ 2 + _

(Cos(.Pi() * objLat / 180) * Sin(.Pi() * areaLat / 180) - Sin(.Pi() * objLat / 180) * _(.Pi() * areaLat / 180) * Cos(Abs(.Pi() * areaLong / 180 - .Pi() * objLong / 180))) ^ 2) ^ 0.5) * 6372795 _

/ 1000

End With

End Function

Блок расчета численности населения

Sub CalculatePopulation().ClearSheet ("Насел_в_ЗО") 'очистка листаborder = ActiveWorkbook.Worksheets("Справочные_данные").Range("_DistanceBorder").Value 'пороговое расстояние для ЗО= General.GetTable("Data_Objects") 'таблицы объектов, ЗО и р-нов= General.GetTable("Data_Zones")= General.GetTable("Data_Areas")distances(1 To UBound(objects, 1), 1 To UBound(areas, 1)) 'массив расстояний между объектами и р-намиincludeCoeffs(1 To UBound(objects, 1), 1 To UBound(areas, 1), 1 To UBound(zones, 1)) 'коэффициенты вхождения р-на в ЗОzonesPop(1 To UBound(objects, 1), 1 To UBound(zones, 1)) 'население в ЗО каждого ТЦ

ReDim zoneBorders(1 To UBound(zones, 1) + 1) 'расширенный массив сграницами ЗО для проверки на полноту вхождения р-нов в ЗО

zoneBorders(1) = -1 * borderk = 2 To UBound(zoneBorders, 1)(k) = zones(k - 1, 2)ki = 1 To UBound(objects, 1) 'для каждого объекта

If objects(i, 4) = "Да" Then 'если включен в расчет

For j = 1 To UBound(areas, 1)

'определение расст. между i-м объектом и ЗО

distances(i, j) = General.GetDistance(objects(i, 2), objects(i, 3), areas(j, 4), areas(j, 5))

'определение вхождений р-нов в ЗО

For k = 2 To UBound(zoneBorders, 1)(zoneBorders(k - 1) - border <= distances(i, j) And _(i, j) < zoneBorders(k - 1) + border) Then 'beta (слишком близко к объекту)(i, j, k - 1) = (distances(i, j) - zoneBorders(k - 1) + border) / (2 * border)(zoneBorders(k - 1) + border <= distances(i, j) And _(i, j) < zoneBorders(k) - border) Then '1 (полностью входит)(i, j, k - 1) = 1(zoneBorders(k) - border <= distances(i, j) And _(i, j) < zoneBorders(k) + border) Then 'alpha (слишком далеко от объекта)(i, j, k - 1) = (zoneBorders(k) + border - distances(i, j)) / (2 * border)(i, j, k - 1) = 0Ifkj

'подсчет суммарного населения в ЗО

For k = 1 To UBound(zones, 1)

zonesPop(i, k) = 0j = 1 To UBound(areas, 1)(i, k) = zonesPop(i, k) + areas(j, 3) * includeCoeffs(i, j, k)jkIf

Next i

'вывод результатов на лист.Sheets("Насел_в_ЗО").Cells(3, 1) = "Объекты\зоны"

ThisWorkbook.Sheets("Насел_в_ЗО").Cells(3, 1).Font.Bold = True.Sheets("Насел_в_ЗО").Cells(3, 2 + UBound(zones, 1)) = "Всего".Sheets("Насел_в_ЗО").Cells(3, 2 + UBound(zones, 1)).Font.Bold = Truei = 1 To UBound(objects, 1).Sheets("Насел_в_ЗО").Cells(3 + i, 1) = objects(i, 1).Sheets("Насел_в_ЗО").Cells(3 + i, 1).Font.Bold = Trueik = 1 To UBound(zones, 1).Sheets("Насел_в_ЗО").Cells(3, 1 + k) = zones(k, 1).Sheets("Насел_в_ЗО").Cells(3, 1 + k).Font.Bold = Truek.Sheets("Насел_в_ЗО").[B4].Resize(UBound(zonesPop, 1), UBound(zonesPop, 2)) = zonesPopi = 1 To UBound(objects, 1)(3 + i, 2 + UBound(zones, 1)).Value = _.sum(Range(Cells(3 + i, 2), Cells(3 + i, 1 + UBound(zones, 1))))i(Cells(4, 2), Cells(3 + UBound(objects, 1), 2 + UBound(zones, 1))).NumberFormat = "0.000"

End Sub

Блок расчета долей рынка объектов

Sub ShareButtonClick()category As String= ActiveWorkbook.Worksheets("Конкуренция").Range("_ShareCategory").Value= GetShares(category)= General.GetTable("Data_Objects")= General.GetTable("Data_Zones").Sheets("Конкуренция").Cells(4, 1) = "Объекты\зоны".Sheets("Конкуренция").Cells(4, 1).Font.Bold = Truei = 1 To UBound(objects, 1).Sheets("Конкуренция").Cells(4 + i, 1) = objects(i, 1).Sheets("Конкуренция").Cells(4 + i, 1).Font.Bold = Trueik = 1 To UBound(zones, 1).Sheets("Конкуренция").Cells(4, 1 + k) = zones(k, 1).Sheets("Конкуренция").Cells(4, 1 + k).Font.Bold = Truek.Sheets("Конкуренция").[B5].Resize(UBound(zoneShares, 1), UBound(zoneShares, 2)) = zoneShares(Cells(5, 2), Cells(4 + UBound(objects, 1), 2 + UBound(zones, 1))).NumberFormat = "0.00%"SubGetShares(category As String)border = ActiveWorkbook.Worksheets("Справочные_данные").Range("_DistanceBorder").Value 'пороговое расстояние для ЗОx = ActiveWorkbook.Worksheets("Справочные_данные").Range("_X").Value 'корректирующие коэфф.Y = ActiveWorkbook.Worksheets("Справочные_данные").Range("_Y").Valuea = ActiveWorkbook.Worksheets("Справочные_данные").Range("_Alpha").Value 'коэфф для полезностиb = ActiveWorkbook.Worksheets("Справочные_данные").Range("_Beta").Value= General.GetTable("Data_Objects") 'таблицы объектов, подобъектов, ЗО и р-нов= General.GetTable("Data_Subobjects")= General.GetTable("Data_Zones")= General.GetTable("Data_Areas")attr(1 To UBound(objects, 1)) 'привлекательностьdistances(1 To UBound(objects, 1), 1 To UBound(Areas, 1)) 'расстоянияutil(1 To UBound(objects, 1), 1 To UBound(Areas, 1)) 'полезностьincludeCoeffs(1 To UBound(objects, 1), 1 To UBound(Areas, 1), 1 To UBound(zones, 1)) 'коэффициенты вхождения р-на в ЗОshares(1 To UBound(objects, 1), 1 To UBound(Areas, 1), 1 To UBound(zones, 1)) 'доли рынкаzoneShares(1 To UBound(objects, 1), 1 To UBound(zones, 1)) 'доли рынка внутри зон охвата zoneBorders(1 To UBound(zones, 1) + 1) 'расширенный массив сграницами ЗО для проверки на полноту вхождения р-нов в ЗО

zoneBorders(1) = -1 * borderk = 2 To UBound(zoneBorders, 1)(k) = zones(k - 1, 2)k

'привлекательность, расстояние и полезности

For i = 1 To UBound(objects, 1)

'подсчет суммарной привлекательности объекта в категории

attr(i) = 0t = 1 To UBound(subobjects, 1)subobjects(t, 3) = category And subobjects(t, 2) = objects(i, 1) Then(i) = attr(i) + subobjects(t, 4) If

Next t

'для объектов с ненулевой привлекательностью

If attr(i) > 0 Thenj = 1 To UBound(Areas, 1)

'определение расстояний до районов(i, j) = General.GetDistance(objects(i, 2), objects(i, 3), Areas(j, 4), Areas(j, 5))

'определение полезностей

If distances(i, j) > 0 Then

util(i, j) = attr(i) ^ a / distances(i, j) ^ b If

'определение вхождений р-нов в ЗО

For k = 2 To UBound(zoneBorders, 1)(zoneBorders(k - 1) - border <= distances(i, j) And _(i, j) < zoneBorders(k - 1) + border) Then 'beta (слишком близко к объекту)(i, j, k - 1) = (distances(i, j) - zoneBorders(k - 1) + border) / (2 * border)(zoneBorders(k - 1) + border <= distances(i, j) And _(i, j) < zoneBorders(k) - border) Then '1 (полностью входит)(i, j, k - 1) = 1(zoneBorders(k) - border <= distances(i, j) And _(i, j) < zoneBorders(k) + border) Then 'alpha (слишком далеко от объекта)(i, j, k - 1) = (zoneBorders(k) + border - distances(i, j)) / (2 * border)(i, j, k - 1) = 0Ifkj If

Next i

'определение долей рынка объектов в каждом районе с разбиением по зонам охвата

For j = 1 To UBound(Areas, 1)

'определение суммарной полезности всех объектов для р-на

sumUtil = 0i = 1 To UBound(objects, 1)= sumUtil + util(i, j) i

'если все полезности = 0

If sumUtil = 0 Theni = 1 To UBound(objects, 1)k = 1 To UBound(zones, 1)(i, j, k) = 0k i

'если существует ненулевая полезность от 1 или более объектов

Elsei = 1 To UBound(objects, 1)k = 1 To UBound(zones, 1)(i, j, k) = includeCoeffs(i, j, k) * util(i, j) / sumUtilkiIf j

'определение долей рынка объектов в их зонах охвата

For i = 1 To UBound(objects, 1)k = 1 To UBound(zones, 1) = 0 'общая численность населения р-нов внутри зоны охвата

sharesOnPop = 0 'сумма произведений численностей населения и долей рынка в районах

For j = 1 To UBound(Areas, 1)includeCoeffs(i, j, k) > 0 Then= sumPop + Areas(j, 3) * includeCoeffs(i, j, k)= sharesOnPop + shares(i, j, k) * Areas(j, 3) If

Next j

'если в зону охвата объекта попадает хотя бы один район

If sumPop > 0 Then(i, k) = sharesOnPop / sumPop * x - YIfki= zoneSharesFunctionClearShares()ThisWorkbook.Sheets("Конкуренция")

.Rows("3:" & Rows.Count).Clear With

End Sub

Блок построения регрессионных моделей

Sub RegressionButtonClick()SubCalculateRegressions()

'линейная модель= General.GetTable2("Регрессии", "B", "6", "B")= General.GetTable2("Регрессии", "C", "6", "D")= Application.WorksheetFunction.LinEst(rY, rX, True, True)ThisWorkbook.Sheets("Регрессии")

.Range("P4").Value = lin(3, 1)

.Range("P5").Value = lin(4, 1)

.Range("R4").Value = lin(3, 2)

.Range("R5").Value = lin(4, 2)

.Range("P7").Value = lin(1, 3)

.Range("Q7").Value = lin(1, 2)

.Range("R7").Value = lin(1, 1)

.Range("P8").Value = lin(1, 3) / lin(2, 3)

.Range("Q8").Value = lin(1, 2) / lin(2, 2)

.Range("R8").Value = lin(1, 1) / lin(2, 1)With

'степенная модельrY2(1 To UBound(rY, 1), 1 To 1)rX2(1 To UBound(rX, 1), 1 To UBound(rX, 2))i = 1 To UBound(rY, 1)(i, 1) = Application.WorksheetFunction.Ln(rY(i, 1))(i, 1) = Application.WorksheetFunction.Ln(rX(i, 1))(i, 2) = Application.WorksheetFunction.Ln(rX(i, 2))i= Application.WorksheetFunction.LinEst(rY2, rX2, True, True)ThisWorkbook.Sheets("Регрессии")

.Range("P11").Value = pow(3, 1)

.Range("P12").Value = pow(4, 1)

.Range("R11").Value = pow(3, 2)

.Range("R12").Value = pow(4, 2)

.Range("P14").Value = pow(1, 3)

.Range("Q14").Value = pow(1, 2)

.Range("R14").Value = pow(1, 1)

.Range("P15").Value = pow(1, 3) / pow(2, 3)

.Range("Q15").Value = pow(1, 2) / pow(2, 2)

.Range("R15").Value = pow(1, 1) / pow(2, 1)With

'экспоненциальная модельi = 1 To UBound(rY, 1)(i, 1) = rX(i, 1)(i, 2) = rX(i, 2)i= Application.WorksheetFunction.LinEst(rY2, rX2, True, True)ThisWorkbook.Sheets("Регрессии")

.Range("P18").Value = expon(3, 1)

.Range("P19").Value = expon(4, 1)

.Range("R18").Value = expon(3, 2)

.Range("R19").Value = expon(4, 2)

.Range("P21").Value = expon(1, 3)

.Range("Q21").Value = expon(1, 2)

.Range("R21").Value = expon(1, 1)

.Range("P22").Value = expon(1, 3) / expon(2, 3)

.Range("Q22").Value = expon(1, 2) / expon(2, 2)

.Range("R22").Value = expon(1, 1) / expon(2, 1)With

'логарифмическая модельi = 1 To UBound(rY, 1)(i, 1) = rY(i, 1)(i, 1) = Application.WorksheetFunction.Ln(rX(i, 1))(i, 2) = Application.WorksheetFunction.Ln(rX(i, 2))i= Application.WorksheetFunction.LinEst(rY2, rX2, True, True)ThisWorkbook.Sheets("Регрессии")

.Range("P25").Value = logar(3, 1)

.Range("P26").Value = logar(4, 1)

.Range("R25").Value = logar(3, 2)

.Range("R26").Value = logar(4, 2)

.Range("P28").Value = logar(1, 3)

.Range("Q28").Value = logar(1, 2)

.Range("R28").Value = logar(1, 1)

.Range("P29").Value = logar(1, 3) / logar(2, 3)

.Range("Q29").Value = logar(1, 2) / logar(2, 2)

.Range("R29").Value = logar(1, 1) / logar(2, 1) WithSub

'очистка ячеек с информацией о моделях

Sub ClearRegressionData()ThisWorkbook.Sheets("Регрессии")

.Range("P4:P5").ClearContents

.Range("R4:R5").ClearContents

.Range("P7:R8").ClearContents

.Range("P11:P12").ClearContents

.Range("R11:R12").ClearContents

.Range("P14:R15").ClearContents

.Range("P18:P19").ClearContents

.Range("R18:R19").ClearContents

.Range("P21:R22").ClearContents

.Range("P25:P26").ClearContents

.Range("R25:R26").ClearContents

.Range("P28:R29").ClearContentsWithSub